gpt4 book ai didi

Java:土耳其语编码 Mac/Windows

转载 作者:行者123 更新时间:2023-12-02 11:09:09 24 4
gpt4 key购买 nike

我在不同的机器上遇到土耳其语特殊字符的问题。代码如下:

String turkish = "ğüşçĞÜŞÇı";

String test1 = new String(turkish.getBytes());
String test2 = new String(turkish.getBytes("UTF-8"));
String test3 = new String(turkish.getBytes("UTF-8"), "UTF-8");

System.out.println(test1);
System.out.println(test2);
System.out.println(test3);

在 Mac 上,这三个字符串与原始字符串相同。在 Windows 计算机上,这三行是(使用 Netbeans 6.7 控制台打印):

?ü?ç?Ü?Ç?
ğüşçĞÜŞÇı
?ü?ç?Ü?Ç?

我不明白这个问题。

最佳答案

String test1 = new String(turkish.getBytes());

您正在获取包含土耳其字符的 Unicode 字符串,并使用默认编码将其转换为字节(使用默认编码通常是一个错误)。然后,您将获取这些字节并将它们解码回字符串,再次使用默认编码。结果是您一无所获(除了丢失任何不适合默认编码的字符);无论您是否将字符串放入编码/解码循环中,对以下 System.out.println(test1) 的操作没有影响,因为它仍然打印字符串而不是字节。

String test2 = new String(turkish.getBytes("UTF-8"));

编码为 UTF-8,然后使用默认编码进行解码。在 Mac 上,默认编码是 UTF-8,因此这不会执行任何操作。在 Windows 上,默认编码永远不是 UTF-8,因此结果是错误的字符。

String test3 = new String(turkish.getBytes("UTF-8"), "UTF-8");

什么也不做。

要使用与默认编码不同的编码将字符串写入标准输出,您需要创建一个类似 new OutputStreamWriter(System.out, "cp1252") 的编码器,并将字符串内容发送到该编码器.

但是在本例中,控制台似乎使用 Windows 代码页 1252 西欧 (+1 ATorres)。这里根本不存在编码不匹配的问题,所以你无法通过重新编码字符串来解决它!

默认编码cp1252与控制台的编码相匹配,只是cp1252根本不包含土耳其字符ğşĞŞı。您可以看到 cp1252 中的其他角色 üçÜÇ 表现得很好。除非您可以重新配置控制台以使用包含您想要的所有字符的不同编码,否则您将无法输出这些字符。

大概在土耳其语 Windows 安装上,默认代码页将为 cp1254,并且您将获得所需的字符(但其他字符不起作用)。您可以通过更改“区域和语言选项控制面板”应用中的“非 Unicode 应用程序使用的语言”设置来测试这一点。

遗憾的是,没有 Windows 区域设置使用 UTF-8 作为默认代码页。使用 stdio 流函数将非 ASCII 输出放到控制台上根本不可靠。有一个 Win32 API 可以直接将 Unicode 写入控制台,但不幸的是没有太多使用它。

关于Java:土耳其语编码 Mac/Windows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1907376/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com