4

我遇到了一个奇怪的问题。请看下面的代码:

public static String toUNICODE(String s) {
  StringBuilder sb=new StringBuilder();
  for(int i=0;i<s.length();i++) {
    System.out.println(s.charAt(i));
    if(s.charAt(i)<=256) {
      sb.append("\\u00");
    } else {
      sb.append("\\u");
    }
    sb.append(Integer.toHexString(s.charAt(i)));
  }
  return sb.toString();
}

它将字符解析为Unicode。它在 Eclipse 中运行良好。但是当我在 JDeveloper IDE 中测试它时,我得到了错误的结果。例如,在 Eclipse 中,\u6211当输入为“我”时,我会得到正确答案。而我将在 JDeveloper 中获得 \u00e6\u2c6\u2018。

请赐教为什么。

4

1 回答 1

3

当您将"我"( 0xE6 0x88 0x91) 的 UTF-8 字节解释为 Windows-1252 时,您将得到"我"

当你传递"我"给你的函数时,结果是\u00e6\u2c6\u2018. 因此,您在某处输入 UTF-8,但程序只是在 Windows-1252 中解释它。

您的问题中没有关于您如何进行输入或阅读的信息,但是一旦您添加了该信息,这应该很容易解决。

顺便说一句,对于 0x100-0xFFF 范围内的代码点,您的函数已损坏,而忽略了这些代码点的填充。以及超出 0xFFFF 的代码点。

于 2012-12-25T13:39:53.720 回答