[英]Can't properly print non-English characters like ë in Windows console
出于某种奇怪的原因,我似乎无法在 Java 中打印 ë。
public class Eindopdracht0002test
{
public static void main(String[] args)
{
System.out.println("\u00EB");
}
}
它应该打印"België"
(比利时的荷兰语)但它返回"Belgi├½"
。
有谁知道如何解决这个问题?
在 UTF-8 中, ë
写为11000011 10101011
(来源: https : 11000011 10101011
)。
Windows 中的控制台使用的代码页是 8 位字符映射(您可以使用chcp
命令检查控制台的代码页)。 这意味着当ë
作为11000011 10101011
位发送到输出流(控制台)时,控制台将其视为两个字符,在850 代码页(根据您的评论)中映射到:
├
- 11000011(十进制195)½
- 10101011(十进制 171)如果您不想使用 UTF-8 编码,您可以创建单独的 Writer 并指定不同的编码,这将根据该编码将字符转换为字节。 为此,您可以使用
OutputStreamWriter(OutputStream out, String charsetName)
在你的情况下可能看起来像
OutputStreamWriter(System.out, "cp850") osw = OutputStreamWriter(System.out, "cp850");
// needed encoding ------------^^^^^
因为您想将具有指定编码的字符发送到标准输出流。
要使用println
方法并确保它会自动刷新其数据,您可以将创建的OutputStreamWriter
包装在
PrintWriter(OutputStream out, boolean autoFlush)
喜欢
PrintWriter out = new PrintWriter(osw, true);
您也可以在一行中完成以下两项操作:
PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out, "cp850"), true);
现在如果你使用out.println("\ë");
它应该使用识别ë
字符并使用cp850
编码来定位其映射(即137
)并将正确的字节表示(此处为10001001
)发送到System.out
(控制台)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.