Java字符串Unicode值

use*_*041 14 java string unicode

如何在java中获取字符串的unicode值?

例如,如果字符串是"Hi",我需要像\ uXXXX\uXXXX这样的东西

小智 20

一些unicode字符跨越两个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();
}
Run Code Online (Sandbox Code Playgroud)


Joa*_*uer 12

此方法将任意转换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();
}
Run Code Online (Sandbox Code Playgroud)

  • @Martin:1.)严格来说,"Unicode"不是任何n值的n位字符集.2.)大多数日文字符属于基本的多语言窗格(前64k Unicode代码点),并且只能用4个十六进制数字表示.3)Java中的unicode转义使用UTF-16,所以如果你必须在外面呈现任何东西BMP,你将不得不使用两个\ u转义(具有正确的代理值)这是我的代码所做的事情,因为`char`实际上是UTF-16代码点而不是Unicode代码点(这两个是相同的事情,*iff*角色在BMP中). (2认同)