无法在Java控制台中打印泰语字符串值
public static void main(String [] args){
String engParam = "Beautiful";
String thaiParam = "สวย";
System.out.println("Output :" + engParam + ":::" + thaiParam);}
输出显示为:
Output :Beautiful:::à?ªà??à?¢
我认为 System.out.println 无法使用默认控制台设置来打印UTF-8字符。还有其他方法可以解决此问题吗?需要帮助。
答案 0 :(得分:2)
一个人不能轻易更改Windows的控制台编码。因此,写入.txt文件。
为了让Windows检测到Unicode UTF-8编码,您可以在开头写一个不可见的BOM字符:"\ufeff"
。
String text = "\uFEFF" + "Output :" + engParam + ":::" + thaiParam;
Path path = Paths.get("temp.txt");
Files.write(path, Collections.singletonList(text)); // Writes in UTF-8
答案 1 :(得分:2)
不是Java的问题。在UTF-8中进行转换时,泰语字符串“สวย”给出字节'0xe0','0xb8','0xaa','0xe0','0xb8','0xa7','0xe0','0xb8','0xa2 '
在Latin1中,0xe0是à
,0xaa是ª
,oxa2是¢
,其他字符都没有给出?
字符的表示形式。
这意味着println
已经完成了其工作的一部分,但是本应显示字符(终端屏幕或IDE)的 无法或未得到指示来处理UTF8
不幸的是,Windows控制台并不是真正的Unicode友好用户。最新版本(> = Win 7)支持所谓的utf-8代码页(chcp 65001
),该页可以正确处理UTF-8字节字符串,前提是其基本字符集可以显示字符。例如,输入chcp 65001
后,我的法语系统会成功显示所有带有UTF-8编码的重音字符(éèùïêçàâ...),但无法显示示例泰语字符串。
如果您需要在Windows上具有真正UTF-8功能的控制台,可以尝试出色的ConEmu。
答案 2 :(得分:1)
您没有指定您的环境,但是这种方法在Windows 10中从我的IDE以及“命令”窗口中对我都有效:
以下是使事情正常进行的步骤:
一旦安装了字体,请在“命令”窗口中将其设置为默认字体。打开命令窗口,单击右上角的图标,选择属性,然后选择 Courier Mono Thai 作为字体:
这些说明特定于Windows10。如果您在其他环境中运行,请使用平台和IDE的完整详细信息更新问题。
已更新19/12/15,以提供另一种方法:
您可以代替执行“命令”窗口中的“代码”页面874(泰语):
PrintStream
使用UTF-8字符集,并使用该PrintStream
写入输出。代码如下:
package thaicharacters;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
public class ThaiCharacters {
public static void main(String[] args) throws UnsupportedEncodingException {
String engParam = "Beautiful";
String thaiParam = "สวย";
// Write the output to a UTF-8 PrintStream:
PrintStream ps = new PrintStream(System.out, true, StandardCharsets.UTF_8.name());
ps.println("UTF-8: " + engParam + ":::" + thaiParam);
}
}
这是“命令”窗口中的输出,显示如下:
答案 3 :(得分:0)
This answer,如果您使用的是eclipse,则可能是您遇到的类似问题(但在IntelliJ中可能几乎相同)
答案 4 :(得分:0)
此答案假定:
转到注册表编辑器(regedit),位于“ HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Command Processor”中,创建一个名为REG_EXPAND_SZ
的{{1}},其值为AutoRun
。然后重试(无需重新启动)。
实际上,这是为chcp 65001
创建和使用“初始脚本”的示例。这可能是我们将 defecto “默认”控制台编码更改为UTF-8(代码页65001)而又无需过多更改系统配置的方法。
要还原它,只需删除此指定值。
答案 5 :(得分:0)
在cmd中使用chcp 65001设置环境变量java_tool_options = -Dfile.encoding = utf8