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

"我"( )の UTF-8 バイトを0xE6 0x88 0x91Windows-1252 として解釈すると、次のようになります。"我"

関数に渡す"我"と、結果は\u00e6\u2c6\u2018. どこかで UTF-8 を入力していますが、プログラムは単純に Windows-1252 で解釈しています。

入力や読み取りの方法に関する質問には情報がありませんが、その情報を追加すると、これは非常に簡単に解決できるはずです。

ところで、あなたの関数は 0x100-0xFFF の範囲のコード ポイントに対して壊れており、それらのパディングを除外しています。0xFFFF を超えるコード ポイントも同様です。

于 2012-12-25T13:39:53.720 に答える