我正在尝试使用下面提到的代码对带有特殊字符的字符串进行编码,例如'É',然后它没有正确复制...
String Cdata="MARIE-HÉLÈNE";
byte sByte[]=Cdata.getBytes();
Cdata= new String(sByte,"UTF-8");
System.out.println(Cdata);
预期输出:MARIE-HÉLÈNE但输出:MARIE-HE即将到来
答案 0 :(得分:2)
首先,您需要确保您的源文件实际存储为UTF-8
- 请参阅@ Ankur的答案以获得更好的解释。
然后,您还需要在getBytes()
上调用String
时提供编码以检索字节数组:
byte sByte[] = Cdata.getBytes("UTF-8");
如果您在没有编码的情况下致电String.getBytes()
,则会使用平台的默认编码,这可能是(几乎)任何内容。另请参阅java.lang.String.getBytes():
使用平台的默认字符集
将此String编码为字节序列
这样,以下SSCCE为我正确打印了预期的输出(注意:从问题中取出标识符,未调整为编码约定):
import java.io.UnsupportedEncodingException;
public class Encoding {
public static void main(String[] args) throws UnsupportedEncodingException {
String Cdata = "MARIE-HÉLÈNE";
byte sByte[] = Cdata.getBytes("UTF-8");
Cdata = new String(sByte,"UTF-8");
System.out.println(Cdata);
}
}
答案 1 :(得分:2)
你需要告诉eclipse使用UTF-8作为它的stdout控制台。你可以通过Window>设置它。偏好>一般>工作区>文本文件编码。