UTF-8编码发出特殊字符,如'É'未正确复制

时间:2013-07-23 08:13:56

标签: java string

我正在尝试使用下面提到的代码对带有特殊字符的字符串进行编码,例如'É',然后它没有正确复制...

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即将到来

2 个答案:

答案 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>设置它。偏好>一般>工作区>文本文件编码。

enter image description here