如何將國際(例如俄語)字符串轉換爲\u
(unicode編號)
\u041e\u041a
爲OK
?將國際字符串轉換爲 u在java中的代碼
回答
如果你需要這個寫.properties
文件,您可以只添加絃樂入Properties對象,然後將其保存到一個文件中。它會照顧轉換。
你可以使用escapeJavaStyleString
從org.apache.commons.lang.StringEscapeUtils
。
有三個部分答案
- 獲取的Unicode的每個字符
- 確定它是否是西里爾頁
- 轉換爲十六進制。
要獲取每個字符,您可以使用charAt()
或toCharArray()
方法遍歷字符串。
for(char c : s.toCharArray())
char的值是Unicode值。
的Cyrillic Unicode字符是在下列範圍內的任何字符:
Cyrillic: U+0400–U+04FF (1024 - 1279)
Cyrillic Supplement: U+0500–U+052F (1280 - 1327)
Cyrillic Extended-A: U+2DE0–U+2DFF (11744 - 11775)
Cyrillic Extended-B: U+A640–U+A69F (42560 - 42655)
如果是在該範圍內是西里爾文。只需執行一次if檢查。如果在範圍內,則使用Integer.toHexString()
並在前面加上"\\u"
。放在一起就應該是這個樣子:
final int[][] ranges = new int[][]{
{ 1024, 1279 },
{ 1280, 1327 },
{ 11744, 11775 },
{ 42560, 42655 },
};
StringBuilder b = new StringBuilder();
for(char c : s.toCharArray()){
int[] insideRange = null;
for(int[] range : ranges){
if(range[0] <= c && c <= range[1]){
insideRange = range;
break;
}
}
if(insideRange != null){
b.append("\\u").append(Integer.toHexString(c));
}else{
b.append(c);
}
}
return b.toString();
編輯:也許應該讓檢查c < 128
和扭轉if
和else
機構;你或許應該逃避一切,是不是ASCII。我在閱讀你的問題時可能太過於字面意思。
這是我的背景下的正確答案。 但是,我相信「getCharArray()」應該是「toCharArray」。 – 2014-02-10 10:26:05
@JenS。實際上,這個方法實際上是['toCharArray()'](http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#toCharArray())。 – ArtB 2014-02-10 19:53:00
這對所有的Unicode字符都不正確!例如對於德語'Ä',它返回'\ uC4',而不是'\ u00c4'。 – mik01aj 2014-12-08 13:13:20
有一個命令行工具,隨Java稱爲native2ascii。這將unicode文件轉換爲ASCII轉義文件。我發現這是爲本地化生成.properties文件的必要步驟。
我也有這個問題。我曾與一些特殊字符一些葡萄牙文,但這些字符在那裏已經以Unicode格式(例如:\u00e3
)。
所以我想將S\u00e3o
轉換爲São
。
我是用apache commons StringEscapeUtils做的。正如@ sorin-sbarnea所說。可以下載here。
使用方法unescapeJava
,像這樣:
String text = "S\u00e3o"
text = StringEscapeUtils.unescapeJava(text);
System.out.println("text " + text);
(也有方法escapeJava
,但是這一次放Unicode字符的字符串中。)
如果有人知道純Java的解決方案,請告訴我們。
存在經由命令行如下執行的JDK tools:
native2ascii -encoding utf8 src.txt output.txt
實施例:
src.txt
بسم الله الرحمن الرحيم
output.txt的
\u0628\u0633\u0645 \u0627\u0644\u0644\u0647 \u0627\u0644\u0631\u062d\u0645\u0646 \u0627\u0644\u0631\u062d\u064a\u0645
如果你想在你的Java應用程序中使用它,您可以通過包裝此命令行:
String pathSrc = "./tmp/src.txt";
String pathOut = "./tmp/output.txt";
String cmdLine = "native2ascii -encoding utf8 " + new File(pathSrc).getAbsolutePath() + " " + new File(pathOut).getAbsolutePath();
Runtime.getRuntime().exec(cmdLine);
System.out.println("THE END");
然後讀取新文件的內容。
這裏是ArtB's answer的改進版本:
StringBuilder b = new StringBuilder();
for (char c : input.toCharArray()) {
if (c >= 128)
b.append("\\u").append(String.format("%04X", (int) c));
else
b.append(c);
}
return b.toString();
這個版本越獄所有非ASCII字符和正常工作像Ä
低Unicode代碼點。
它是否適用於多字節字符,例如當一行中的4-6-8個字節(2,3,4個java ** char **值)僅代表一個符號? – radistao 2017-06-12 12:50:01
你也許可以破解如果從這個JavaScript代碼:
/* convert to \uD83D\uDE4C */
function text_to_unicode(string) {
'use strict';
function is_whitespace(c) { return 9 === c || 10 === c || 13 === c || 32 === c; }
function left_pad(string) { return Array(4).concat(string).join('0').slice(-1 * Math.max(4, string.length)); }
string = string.split('').map(function(c){ return "\\u" + left_pad(c.charCodeAt(0).toString(16).toUpperCase()); }).join('');
return string;
}
/* convert \uD83D\uDE4C to */
function unicode_to_text(string) {
var prefix = "\\\\u"
, regex = new RegExp(prefix + "([\da-f]{4})","ig")
;
string = string.replace(regex, function(match, backtrace1){
return String.fromCharCode(parseInt(backtrace1, 16))
});
return string;
}
阿帕奇百科全書StringEscapeUtils.escapeEcmaScript(String)
返回Unicode字符使用\u
符號轉義的字符串。
"Art of Beer " -> "Art of Beer \u1F3A8 \u1F37A"
只是對於一些基本的方法(從native2ascii工具的啓發):
/**
* Encode a String like äöü to \u00e4\u00f6\u00fc
*
* @param text
* @return
*/
public String native2ascii(String text) {
if (text == null)
return text;
StringBuilder sb = new StringBuilder();
for (char ch : text.toCharArray()) {
sb.append(native2ascii(ch));
}
return sb.toString();
}
/**
* Encode a Character like ä to \u00e4
*
* @param ch
* @return
*/
public String native2ascii(char ch) {
if (ch > '\u007f') {
StringBuilder sb = new StringBuilder();
// write \udddd
sb.append("\\u");
StringBuffer hex = new StringBuffer(Integer.toHexString(ch));
hex.reverse();
int length = 4 - hex.length();
for (int j = 0; j < length; j++) {
hex.append('0');
}
for (int j = 0; j < 4; j++) {
sb.append(hex.charAt(3 - j));
}
return sb.toString();
} else {
return Character.toString(ch);
}
}
- 1. 將國際格式的字符串轉換爲數字
- 2. 將utf8代碼點字符串轉換爲utf8 <U+0161>轉換爲utf8
- 3. 將電話號碼轉換爲國際國家代碼iOS
- 4. 將字符串轉換爲Java Android中的源代碼
- 5. 將字符串轉換爲dateTime美國
- 6. Java - 將字符串從字符串轉換爲IBM437字符代碼
- 7. PHP國際國家代碼2國家代碼的字符
- 8. 將字符串轉換爲可逆的字符串,在Java中
- 9. Java - 將字符串轉換爲字符[]
- 10. 如何將unicode字符轉換爲java中的實際字符?
- 11. 字符串轉換爲運行時代碼在java中
- 12. 爲什麼PortStemmer在NLTK我的 「字符串」 轉換爲U 「串」
- 13. 在Matlab中將數字轉換爲實際時間字符串
- 14. 將字符串轉換爲byte []和byte []轉換爲JAVA中的字符串
- 15. java字符串unicode代碼點轉換爲字符
- 16. 如何將JavaScript中的字符串值轉換爲代碼中的字符串?
- 17. 如何將U + 20000之類的utf-32代碼轉換爲VBA中的字符?
- 18. 在Java中將十六進制字符串轉換爲ASCII碼
- 19. Java - 將字節[]轉換爲字符串
- 20. 將字符串轉換爲java中的數組字符串
- 21. 將字符串轉換爲Java中的字符串數組
- 22. 在Android中,如何將HTML源代碼轉換爲字符串?
- 23. 轉換爲國際字符不使用jsonobject.tostring,但與字符串文字?
- 24. 我會如何將字符串算法轉換爲實際的代碼?
- 25. 將等效的unicode字符串轉換爲Java中的ASCII碼?
- 26. Java將鍵碼轉換爲字符串或字符
- 27. Ruby:將編碼字符轉換爲實際的UTF-8字符
- 28. 爲JNI代碼轉義Java字符串
- 29. 在java中用\ u取代\\ u字符串
- 30. Javascript/jQuery:如何將字符串轉換爲HTML字符代碼
那麼你需要確保你保存UTF-8格式的文件(也許UTF-16或UCS-2/4可以工作),否則你將會遇到問題 – ArtB 2011-06-03 17:18:38
@ArtB:不,屬性總是將輸入文件解釋爲ISO-8859-1(第一個Unicode頁),並保存到該編碼中,這就是爲什麼它需要'\ uXXXX'轉義並在保存時創建它們。版本1.6屬性允許讀取來自Reader對象的輸入,以便您可以製作屬於自己的基於UTF-8的專有屬性文件格式。 – x4u 2011-06-03 17:26:55
Oh ...這不會導致非首頁頁面語言的問題嗎? – ArtB 2011-06-03 17:50:17