ehs*_*n7b 45 java unicode escaping unicode-escapes
我如何转换的国际(如俄罗斯)字符串到\u
数字(Unicode数字),
如\u041e\u041a
为OK
?
Abd*_*UMI 52
有一个JDK工具通过命令行执行如下:
native2ascii -encoding utf8 src.txt output.txt
Run Code Online (Sandbox Code Playgroud)
示例:
src.txt
??? ???? ?????? ??????
Run Code Online (Sandbox Code Playgroud)
output.txt的
\u0628\u0633\u0645 \u0627\u0644\u0644\u0647 \u0627\u0644\u0631\u062d\u0645\u0646 \u0627\u0644\u0631\u062d\u064a\u0645
Run Code Online (Sandbox Code Playgroud)
如果要在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");
Run Code Online (Sandbox Code Playgroud)
然后阅读新文件的内容.
sor*_*rin 23
你可以使用escapeJavaStyleString
从org.apache.commons.lang.StringEscapeUtils
.
Der*_*rzu 16
我也有这个问题.我有一些带有一些特殊字符的葡萄牙语文本,但这些字符已经是unicode格式(例如:)\u00e3
.
所以我想转换S\u00e3o
为São
.
我使用apache commons StringEscapeUtils做到了.正如@ sorin-sbarnea所说.可以在这里下载.
使用方法unescapeJava
,如下所示:
String text = "S\u00e3o"
text = StringEscapeUtils.unescapeJava(text);
System.out.println("text " + text);
Run Code Online (Sandbox Code Playgroud)
(还有方法escapeJava
,但是这个方法将unicode字符放在字符串中.)
如果有人知道纯Java的解决方案,请告诉我们.
mik*_*1aj 15
这是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();
Run Code Online (Sandbox Code Playgroud)
此版本转义所有非ASCII字符,并且对于低Unicode代码点正常工作Ä
.
Sle*_*led 12
答案有三个部分
要获取每个字符,您可以使用charAt()
或toCharArray()
方法遍历String .
for( char c : s.toCharArray() )
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
如果它在这个范围内,那就是西里尔文.只需执行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();
Run Code Online (Sandbox Code Playgroud)
编辑:可能应该检查c < 128
并反转if
和else
身体; 你可能应该逃避非ASCII的一切.在阅读你的问题时,我可能过于文字了.
如果您需要它来编写.properties
文件,您只需将字符串添加到Properties对象中,然后将其保存到文件中.它会照顾转换.
小智 5
Apache commons StringEscapeUtils.escapeEcmaScript(String)
返回一个字符串,其中包含使用该\u
符号转义的unicode字符。
"Art of Beer " -> "Art of Beer \u1F3A8 \u1F37A"
Run Code Online (Sandbox Code Playgroud)