当前位置: 代码迷 >> java >> 无法使用 Java 解码西里尔文本
  详细解决方案

无法使用 Java 解码西里尔文本

热度:15   发布时间:2023-07-25 19:46:05.0

我有以下文字:

Р?Р?Р?Р° Р?Р?С?Р?С?Р?Р?Р?Р°

在以下在线解码器帮助下,我能够将提到的字符串解码为正确的字符串:

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

源编码为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);

返回

Р С’Р Р…Р Р…Р В° Р С?Р В?Р?Р?Р С”Р?ѓРВ?Р С?Р Р?Р В°

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

您正在尝试为String (s) 分配一个Charset ,但您真正需要做的是使用特定的Charset提取bytes

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);
  相关解决方案