【问题标题】:Unable to decode сyrillic text with Java无法使用 Java 解码西里尔文文本
【发布时间】:2019-07-24 19:16:57
【问题描述】:

我有以下文字:

Анна Меркулова

在以下在线解码器https://2cyr.com/decode/?lang=en 的帮助下,我能够将提到的字符串解码为正确的字符串:

Анна Меркулова

源编码为 UTF-8,目标为 WINDOWS-1251

但我仍然无法在 Java 中以编程方式完成:

String utf8String = new String("Анна Меркулова".getBytes(), "UTF-8");
String ansiString = new String(utf8String.getBytes("UTF-8"), "windows-1251");
System.out.println(ansiString);

返回

Анна Меркулова

我做错了什么以及如何正确转换字符串?

【问题讨论】:

  • Java 中的字符串在内部始终使用相同的编码。 new String() 根据您设置的编码创建一个字符串。如果要输出另一种编码,则必须打开设置编码的输出流。您可以使用 OutputStreamWriter。

标签: java encoding utf-8 text-decoding


【解决方案1】:

您正在尝试将String(s) 分配给Charset,但您真正需要做的是提取 bytes 与特定的Charset

final byte[] bytes = "Анна Меркулова".getBytes("UTF-8");
final String utf8String = new String(bytes);
final byte[] bytes1 = utf8String.getBytes("windows-1251");
final String ansiString = new String(bytes1);

顺便说一句,你不需要所有这些

final byte[] bytes = "Анна Меркулова".getBytes("windows-1251");
final String result = new String(bytes);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-08
    • 1970-01-01
    • 2013-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多