因为一些奇怪的原因我好像无法打印ë 在 java 。
public class Eindopdracht0002test { public static void main(String[] args) { System.out.println("\u00EB"); } }
应该打印出来的 "België" (荷兰语代表比利时)不管它如何返回 "Belgi├½" .有人知道怎么解决这个问题吗?
"België"
"België"
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) 在你的情况下可能看起来像
ë
11000011 10101011
chcp
├
½
OutputStreamWriter(OutputStream out, String charsetName)
OutputStreamWriter(System.out, "cp850") osw = OutputStreamWriter(System.out, "cp850"); // needed encoding ------------^^^^^
因为您希望将指定编码的字符发送到标准输出流。使用 println 方法并确保它将自动刷新您可以 Package 创建的数据 OutputStreamWriter 在 PrintWriter(OutputStream out, boolean autoFlush) 就像
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("\u00EB"); 它应该使用识别 ë 特征和用途 cp850 编码以定位其Map(即 137 )并发送正确的字节表示(此处 10001001 )至 System.out (控制台)。
out.println("\u00EB");
cp850
137
10001001
System.out
1条答案
按热度按时间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)
在你的情况下可能看起来像因为您希望将指定编码的字符发送到标准输出流。
使用
println
方法并确保它将自动刷新您可以 Package 创建的数据OutputStreamWriter
在PrintWriter(OutputStream out, boolean autoFlush)
就像您也可以在一行中完成这两件事:
现在如果你用
out.println("\u00EB");
它应该使用识别ë
特征和用途cp850
编码以定位其Map(即137
)并发送正确的字节表示(此处10001001
)至System.out
(控制台)。