9

たとえば、Emoji Char セットでU+1F601は、 は「GRINNING FACE WITH SMILING EYES」の Unicode 値であり、\xF0\x9F\x98\x81はこの文字の UTF-8 バイト値です。

\xE2\x9D\xA4はヘビー ブラック ハート、ユニコードはU+2764.

私の質問は、 value のバイト配列がある場合(0xF0, 0x9F, 0x98, 0x81, 0xE2, 0x9D, 0xA4)、それを Unicode 値に変換するにはどうすればよいですか?

上記の結果について、私が欲しいのは、値"1F601"とを持つ文字列配列"2764"です。

この作業を行うための複雑なメソッドを作成できることはわかっていますが、この作業を行うためのライブラリが既にあることを願っています。

4

4 に答える 4

8

私の質問は、値 (0xF0、0x9F、0x98、0x81) を持つバイト配列がある場合、それを Unicode 値に変換するにはどうすればよいですか?

Stringデータとエンコーディングを指定してコンストラクターを呼び出すだけです。

String text = new String(bytes, "UTF-8");

Charsetエンコーディングの名前の代わりにa を指定できます。次のように記述できるGuavaの単純なCharsetsクラスが好きです。

String text = new String(bytes, Charsets.UTF_8);

または Java 7 の場合、StandardCharsetsGuava を必要とせずに使用します。

String text = new String(bytes, StandardCharsets.UTF_8);
于 2013-09-04T06:07:22.713 に答える
1

Stringクラスを使用するだけです:

byte[] bytesArray = new byte[10]; // array of bytes (0xF0, 0x9F, 0x98, 0x81)

String string = new String(bytesArray, Charset.forName("UTF-8")); // covert byteArray

System.out.println(string); // Test result
于 2013-09-04T06:17:42.493 に答える
0

以下は、InputStreamReader を使用した例です。

InputStream inputStream = new FileInputStream("utf-8-text.txt");
Reader      reader      = new InputStreamReader(inputStream,
                                                Charset.forName("UTF-8"));

int data = reader.read();
while(data != -1){
    char theChar = (char) data;
    data = reader.read();
}

reader.close();

参照: Java I18N の例

于 2015-07-08T16:33:34.043 に答える
0

UNICODE(ISO_8859_1)をUTF-8に変換する関数はこちら

public static String String_ISO_8859_1To_UTF_8(String strISO_8859_1) {
final StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < strISO_8859_1.length(); i++) {
  final char ch = strISO_8859_1.charAt(i);
  if (ch <= 127) 
  {
      stringBuilder.append(ch);
  }
  else 
  {
      stringBuilder.append(String.format("%02x", (int)ch));
  }
}
String s = stringBuilder.toString();
int len = s.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
    data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
                         + Character.digit(s.charAt(i+1), 16));
}
String strUTF_8 =new String(data, StandardCharsets.UTF_8);
return strUTF_8;
}

テスト

String strA_ISO_8859_1_i = new String("الغلاف".getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);

System.out.println("ISO_8859_1 strA est = "+ strA_ISO_8859_1_i + "\n String_ISO_8859_1To_UTF_8 = " + String_ISO_8859_1To_UTF_8(strA_ISO_8859_1_i));

結果

ISO_8859_1 strA est = اÙغÙا٠String_ISO_8859_1To_UTF_8 = الغلاف

于 2018-10-30T14:48:41.710 に答える