Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有更好的方法将包含UTF-8字节码的字符串转换为UTF-8字符串?_Java_Utf 8 - Fatal编程技术网

Java 有没有更好的方法将包含UTF-8字节码的字符串转换为UTF-8字符串?

Java 有没有更好的方法将包含UTF-8字节码的字符串转换为UTF-8字符串?,java,utf-8,Java,Utf 8,我有一个字符串,其中包含“\u0627\u0644\u0628\u062d\u0631\u0649\u0646” 我想转换为一个包含的字符串 我尝试过使用这种方法,但没有达到我希望的效果: protected String convertUtf(String input) throws CharacterCodingException { Charset charset = Charset.forName("UTF-8"); CharsetDecoder decoder = char

我有一个字符串,其中包含
“\u0627\u0644\u0628\u062d\u0631\u0649\u0646”

我想转换为一个包含
的字符串

我尝试过使用这种方法,但没有达到我希望的效果:

protected String convertUtf(String input) throws CharacterCodingException {
   Charset charset = Charset.forName("UTF-8");
   CharsetDecoder decoder = charset.newDecoder();
   CharsetEncoder encoder = charset.newEncoder();
   ByteBuffer bbuf = encoder.encode(CharBuffer.wrap(input));
   CharBuffer cbuf = decoder.decode(bbuf);
   return cbuf.toString();
}

想法?

这是一样的。这两种形式可以互换。这只是java代码中表示字符串的另一种方式。
字符串
对象是相同的。例如:

String s1 = "\u0627\u0644\u0628\u062d\u0631\u0649\u0646";
String s2 = "البحرىن";

System.out.println(s1.equals(s2)); //prints "true"

是一样的。这两种形式可以互换。这只是java代码中表示字符串的另一种方式。
字符串
对象是相同的。例如:

String s1 = "\u0627\u0644\u0628\u062d\u0631\u0649\u0646";
String s2 = "البحرىن";

System.out.println(s1.equals(s2)); //prints "true"

如果您有文字字符串“\u0627\u0644\u0628\u062d\u0631\u0649\u0646”并希望将其转换为正确的Unicode字符串,则必须手动进行解析/转换。您可以在
String java.util.Properties#loadConvert(char[]in,int off,int len,char[]convtBuf)
中找到此方法。由于它是私有的,您不能从外部使用它,而必须复制它。

如果您有文本字符串“\u0627\u0644\u0628\u062d\u0631\u0649\u0646”并希望将其转换为正确的Unicode字符串,则必须手动进行解析/转换。您可以在
String java.util.Properties#loadConvert(char[]in,int off,int len,char[]convtBuf)
中找到此方法。因为它是私有的,所以你不能从外部使用它,而必须复制它。

要转换带有文字代码点的字符串(例如
string s=“\\u0627[…]”“
),请参阅。

要转换带有文字代码点的字符串(例如
string s=“\\u0627[…]”
),请参阅。

我认为这不是“字节码”的意思。但是说到文本编码,每个人似乎都喜欢自己编单词……你是说原始字符串包含7个unicode转义序列,每个转义序列长度为6个字符,所以
orig.length()==42
?好的,很抱歉使用了不正确的术语。我想做的是打印出一个可读的字符串,而我使用的是UTF-8编码。如果您的情况如@LouisWasserman所示,请参阅@KevinK,这是值得发布的答案。我不认为这是“字节码”的意思。但是说到文本编码,每个人似乎都喜欢自己编单词……你是说原始字符串包含7个unicode转义序列,每个转义序列长度为6个字符,所以
orig.length()==42
?好的,很抱歉使用了不正确的术语。我想做的是打印出一个可读的字符串,而我使用的是UTF-8编码。如果您的情况如@LouisWasserman所示,请参阅@KevinK,这是值得发布的答案。我知道这两个字符串“相等”,但在我的系统上
system.out.println(s1)显示
\u0627\u0644\u0628\u062d\u0631\u0649\u0646
。我需要做什么来显示外语?我想,让你的控制台支持UTF-8。但即使它没有,它也不应该打印序列。我知道这两个字符串“相等”,但在我的系统
system.out.println(s1)显示
\u0627\u0644\u0628\u062d\u0631\u0649\u0646
。我需要做什么来显示外语?我想,让你的控制台支持UTF-8。但即使它没有,它也不应该打印序列。在我的机器上,它打印阿拉伯字母。