Java字符串Unicode值

问题描述:

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

例如,如果字符串是“你好” 我需要这样的东西为\ uXXXX为\ uXXXX

+3

为什么?你想要做什么? 'charAt()'会有所帮助。如果你想要Unicode代码而不是UTF-16代码单元,那么'codePointAt()'是更正确的方法(但是如果你想为Java源代码或类似代码编写'\ u'转义则不会有帮助。 – 2011-04-20 17:01:03

+0

为了简化一切,我有一个来自java源文件的英文字符串。它被转换成日语。然后我需要\ uXXXX unicode值,因为在源文件中英文字符串将被日文替换。 – user489041 2011-04-20 17:05:27

+0

@user:在这种情况下,通过'charAt()'将值返回格式化为4位数的十六进制数,并且应该预先设置'\ u'。 – 2011-04-20 17:07:28

某些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(); 
} 
+0

不错!很酷的例子 – user489041 2013-02-11 23:15:09

此方法转换任意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(); 
} 
+0

真棒,完美工作。谢谢 – user489041 2011-04-20 18:08:07

+1

@ user489041:我不同意:正确的做法是用'java -encoding UTF-8'编译。没有混乱,没有大惊小怪。特别是因为20年来,Java仍然没有标准的方式来用他们的正式名称来谈论代码点。这意味着你正试图在你的代码中插入邪恶和神秘的魔法数字。这不是一件好事!当然,我可能更愿意看到“\ N {希腊小写字母ALPHA}”而不是“α”,但是I ** SURELY **不想看到“\ u03B1”!这只是邪恶的。你将如何保持这种crudola? – tchrist 2011-04-23 22:40:33

+0

只有4位数? Unicode是一个32位字符集,OP讲日语。 – Martin 2012-08-28 11:17:33