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。但即使它没有,它也不应该打印序列。在我的机器上,它打印阿拉伯字母。