回答
某些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();
}
不錯!很酷的例子 – 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();
}
真棒,完美工作。謝謝 – user489041 2011-04-20 18:08:07
@ user489041:我不同意:正確的做法是用'java -encoding UTF-8'編譯。沒有混亂,沒有大驚小怪。特別是因爲20年來,Java仍然沒有標準的方式來用他們的正式名稱來談論代碼點。這意味着你正試圖在你的代碼中插入邪惡和神祕的魔法數字。這不是一件好事!當然,我可能更願意看到「\ N {希臘小寫字母ALPHA}」而不是「α」,但是I ** SURELY **不想看到「\ u03B1」!這只是邪惡的。你將如何保持這種crudola? – tchrist 2011-04-23 22:40:33
只有4位數? Unicode是一個32位字符集,OP講日語。 – Martin 2012-08-28 11:17:33
- 1. Java Unicode字符串長度
- 2. Unicode字符串爲Unicode字符,Python 3
- 3. Unicode字符字符串
- 4. 自動Unicode字符串在Java中
- 5. QPython unicode字符串
- 6. Unicode字符串++/CLI
- 7. Unicode字符串php
- 8. len(unicode字符串)
- 9. raw_inputting Unicode字符串
- 10. Qpython unicode字符串
- 11. 使用unicode值打印字符(java)
- 12. 從excel讀取unicode值到字符串
- 13. 拆分字符串,unicode,unicode,python中的字符串
- 14. Unicode字符串文字
- 15. 如何從字符串字符中返回unicode 8字節值
- 16. Java替換字符串中的Unicode字符
- 17. 如何檢測Java字符串中的unicode字符?
- 18. 如何在Java中修改字符串中的Unicode \ u0085字符
- 19. java字符串unicode代碼點轉換爲字符
- 20. 如何unicode字符串解碼爲Unicode值
- 21. 插入Unicode字符爲VBA字符串
- 22. Python中,字符串,Unicode字符
- 23. Unicode字符串的字符數
- 24. 從字符串中刪除Unicode字符
- 25. 從Unicode字符串轉義字符
- 26. 檢查字符串包含Unicode字符
- 27. Unicode字符串中的奇數字符
- 28. 字符串中的Unicode字符 - iphone
- 29. 檢查字符串內的字符以獲取其Unicode值
- 30. 獲取字符串中第一個字符的Unicode值
爲什麼?你想要做什麼? 'charAt()'會有所幫助。如果你想要Unicode代碼而不是UTF-16代碼單元,那麼'codePointAt()'是更正確的方法(但是如果你想爲Java源代碼或類似代碼編寫'\ u'轉義則不會有幫助。 – 2011-04-20 17:01:03
爲了簡化一切,我有一個來自java源文件的英文字符串。它被轉換成日語。然後我需要\ uXXXX unicode值,因爲在源文件中英文字符串將被日文替換。 – user489041 2011-04-20 17:05:27
@user:在這種情況下,通過'charAt()'將值返回格式化爲4位數的十六進制數,並且應該預先設置'\ u'。 – 2011-04-20 17:07:28