0

この質問のおかげでUnicodeを文字に変換する方法を知っていますが、Unicodeでビット演算を実行している場合はうまく機能しません。

これ.fromCharCode()は、Unicodeを文字に変換するJavascript関数です。ビット単位の演算をパラメーターとして処理できる、Javaでの同等のものを知りたいです。

このコードはコンパイルされません

public String str2rstr_utf8(String input) {
  String output = "";
  int i = -1;
  int x, y;
  while (++i < input.length()) {
    /* Decode utf-16 surrogate pairs */
    x = Character.codePointAt(input, i);
    y = i + 1 < input.length() ? Character.codePointAt(input, i + 1) : 0;
    if (0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF) {
      x = 0x10000 + ((x & 0x03FF) << 10) + (y & 0x03FF);
      i++;
    }
    /* Encode output as utf-8 */
    if (x <= 0x7F) output += String.fromCharCode(x);
    else if (x <= 0x7FF) output += String.fromCharCode(0xC0 | ((x >>> 6) & 0x1F), 0x80 | (x & 0x3F));
    else if (x <= 0xFFFF) output += String.fromCharCode(0xE0 | ((x >>> 12) & 0x0F), 0x80 | ((x >>> 6) & 0x3F), 0x80 | (x & 0x3F));
    else if (x <= 0x1FFFFF) output += String.fromCharCode(0xF0 | ((x >>> 18) & 0x07), 0x80 | ((x >>> 12) & 0x3F), 0x80 | ((x >>> 6) & 0x3F), 0x80 | (x & 0x3F));
  }
  return output;
}
4

2 に答える 2

2

私が間違っていなければ、あなたはJava文字列をUTF-8でエンコードしようとしています。Javaではそれを直接サポートしています。

public byte[] str2rstr_utf8(String str)
{
    return str.getBytes(Charset.forName("UTF-8"));
}
于 2012-12-31T19:32:16.700 に答える
0

基本的に行うことは、UTF-16でエンコードされた入力文字列をUTF-16でエンコードされた出力文字列に変換することです。その文字にはUTF-8でエンコードされたバイトの値が含まれます。Unicodeプログラミングでそれを行う必要はほとんどありません!しかし、実際に必要なオフチャンス(このような奇妙な形式の文字列を必要とするサードパーティのAPIとの対話など)では、ビット単位の操作を手動で処理せずに同じことを実行できます。Javaにあなたのために働く:

public String str2rstr_utf8(String input)
{
    byte[] utf8 = input.getBytes(Charset.forName("UTF-8"));
    StringBuilder output = new StringBuilder(utf8.length);
    for (int i = 0; i < utf8.length; ++i)
        output.append((char)utf8[i]);
    return output.toString();
}
于 2013-01-01T02:58:03.723 に答える