无法正确打印非英语字符,如ë 在windows控制台中

pn9klfpd  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(229)

因为一些奇怪的原因我好像无法打印ë 在 java 。

public class Eindopdracht0002test
{
  public static void main(String[] args)
  {
    System.out.println("\u00EB");
  }
}

应该打印出来的 "België" (荷兰语代表比利时)不管它如何返回 "Belgi├½" .
有人知道怎么解决这个问题吗?

p8ekf7hl

p8ekf7hl1#

在utf-8中 ë 写为 11000011 10101011 (来源:https://unicode-table.com/en/00eb).
windows中的控制台正在使用8位字符Map的代码页(您可以使用 chcp 命令)。这意味着什么时候 ë 发送到输出流(控制台)作为 11000011 10101011 位,控制台将其视为两个字符,在850代码页中(基于您的注解)Map到: -11000011(小数点后195) ½ -10101011(十进制171)
如果不想使用utf-8编码,可以创建单独的writer并指定不同的编码,根据该编码将字符转换为字节。为此,您可以使用 OutputStreamWriter(OutputStream out, String charsetName) 在你的情况下可能看起来像

OutputStreamWriter(System.out, "cp850") osw = OutputStreamWriter(System.out, "cp850");
//  needed encoding ------------^^^^^

因为您希望将指定编码的字符发送到标准输出流。
使用 println 方法并确保它将自动刷新您可以 Package 创建的数据 OutputStreamWriterPrintWriter(OutputStream out, boolean autoFlush) 就像

PrintWriter out = new PrintWriter(osw, true);

您也可以在一行中完成这两件事:

PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out, "cp850"), true);

现在如果你用 out.println("\u00EB"); 它应该使用识别 ë 特征和用途 cp850 编码以定位其Map(即 137 )并发送正确的字节表示(此处 10001001 )至 System.out (控制台)。

相关问题