【问题标题】:Convert string from codepage 1252 to 1250将字符串从代码页 1252 转换为 1250
【发布时间】:2011-01-31 11:55:20
【问题描述】:

如何将在代码页 1252 中解码的字符的 String 转换为在代码页 1250 中解码的 String

例如

String str1252 = "ê¹ś¿źæñ³ó";
String str1250 = convert(str1252);
System.out.print(str1250);

我想找到这样的convert() 函数,打印输出将是:

ęąśżźćńłó

这些是波兰语特有的字符。

感谢您的任何建议。

【问题讨论】:

  • 这个问题的上下文是什么?

标签: java codepages cp1252 cp1250


【解决方案1】:

这很简单:

public String convert(String s) {
    return new String(s.getBytes("Windows-1252"), "Windows-1250");
}

注意System.out.print()可以引入another incorrect conversion due to mismatch between ANSI and OEM code pages。不过System.console().writer().print() 应该能正确输出。

【讨论】:

  • 不过,由于某种原因,它会破坏 'ś' 和 'ź'。也许是因为它们不在 Windows-1250 中?不确定,因为我没有使用任何这些编码。
  • @Sergey:是的,Windows-1250 中没有这些字符。
  • 感谢您的回答。它几乎可以工作。如果字符大于 256,则不会正确转换为字节(已更改为 63 - '?')。因此,需要对字符串的每个字符进行额外检测。我发现以下代码有效: bytes[] bytes = text.getBytes("Windows-1252"); String text1250 = new String(bytes, "Windows-1250"); StringBuffer 缓冲区 = new StringBuffer(text1250); for (int i = 0 ; i 256) buffer.replace(i, i+1, text.substring(i, i+1)); } text1250 = buffer.toString();
  • @rybz,我会将其更改为 if (buffer.charAt(i) == '?' && text.charAt(i) != '?') - 也就是说,如果不是“?”但是变成了'?',然后取而代之的是原始字符。即使某些不 > 256 的字符也被破坏,这也具有正常工作的优点。
  • @Sergey,这可能是个好点。我还没有发现字符
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-13
相关资源
最近更新 更多