在java中将国际string转换为\ u代码

如何将国际(如俄罗斯)string转换为\u数字(unicode数字)
OK

如果你需要这样写一个.properties文件,你可以将string添加到一个Properties对象中,然后将其保存到一个文件中。 它会照顾转换。

有一个通过命令行执行的JDK工具 ,如下所示:

 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"); 

然后阅读新文件的内容。

你可以使用org.apache.commons.lang.StringEscapeUtils escapeJavaStyleString

我也有这个问题。 我有一些葡萄牙语的文字和一些特殊的字符,但这些字符已经以unicode格式(例如: \u00e3 )。

所以我想把S\u00e3o

我做了使用Apache Commons StringEscapeUtils 。 正如@ sorin-sbarnea所说。 可以在这里下载。

使用方法unescapeJava ,像这样:

 String text = "S\u00e3o" text = StringEscapeUtils.unescapeJava(text); System.out.println("text " + text); 

(还有escapeJava方法,但是这个把unicode字符放在string中。)

如果有人知道纯Java的解决scheme,请告诉我们。

以下是ArtB答案的改进版本:

  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码点。

答案有三个部分

  1. 获取每个字符的Unicode
  2. 确定它是否在西里尔页
  3. 转换为hex。

要获取每个字符,可以使用charAt()toCharArray()方法遍历string。

 for( char c : s.toCharArray() ) 

char的值是Unicode值。

西里尔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并扭转ifelse机构; 你可能应该逃避一切不是ASCII的。 我在阅读你的问题时可能太直接了。

有一个叫做native2ascii的 java命令行工具。 这将unicode文件转换为ASCII转义文件。 我发现这是为本地化生成.properties文件的必要步骤。

Apache Commons StringEscapeUtils.escapeEcmaScript(String)返回一个string,其中包含使用\u表示法转义的unicode字符。

 "Art of Beer 🎨 🍺" -> "Art of Beer \u1F3A8 \u1F37A" 

你可能可以从这个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; } 

来源: iCompile – 另一个JavaScript Unicode编码/解码