无法在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字符。是否有其他方法可以解决这个问题?需要帮助。
发布于 2019-12-15 02:53:48
您没有指定您的环境,但是在我的IDE和命令窗口中的Windows 10上,这种方法对我是有效的:
下面是让事情正常运行的步骤:



这些说明是针对Windows 10的。如果您在不同的环境中运行,请使用您的平台和IDE的详细信息更新您的问题。
更新12/15/19,以提供一种替代办法:
与在命令窗口中使用代码页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);
}
}以下是命令窗口中的输出,显示:

发布于 2019-12-13 12:20:08
很难更改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发布于 2019-12-13 12:39:57
不是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。
https://stackoverflow.com/questions/59322322
复制相似问题