web-dev-qa-db-ja.com

Java文字列Unicode値

Javaで文字列のUnicode値を取得するにはどうすればよいですか?

たとえば、文字列が「Hi」の場合、\ uXXXX\uXXXXのようなものが必要です

14
user489041

一部のUnicode文字は2つにまたがっていますJava文字。引用元 http://docs.Oracle.com/javase/tutorial/i18n/text/unicode.html

16ビットの範囲外で、0x10000から0x10FFFFの範囲内の値を持つ文字は、補助文字と呼ばれ、char値のペアとして定義されます。

非ASCIIをエスケープする正しい方法:

private static String escapeNonAscii(String str) {

  StringBuilder retStr = new StringBuilder();
  for(int i=0; i<str.length(); i++) {
    int cp = Character.codePointAt(str, i);
    int charCount = Character.charCount(cp);
    if (charCount > 1) {
      i += charCount - 1; // 2.
      if (i >= str.length()) {
        throw new IllegalArgumentException("truncated unexpectedly");
      }
    }

    if (cp < 128) {
      retStr.appendCodePoint(cp);
    } else {
      retStr.append(String.format("\\u%x", cp));
    }
  }
  return retStr.toString();
}
20
Raghu A

このメソッドは、任意のStringをASCIIセーフ表現に変換して、Javaソースコード(またはプロパティファイルなど)で使用します。

public String escapeUnicode(String input) {
  StringBuilder b = new StringBuilder(input.length());
  Formatter f = new Formatter(b);
  for (char c : input.toCharArray()) {
    if (c < 128) {
      b.append(c);
    } else {
      f.format("\\u%04x", (int) c);
    }
  }
  return b.toString();
}
12
Joachim Sauer