1

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

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 来了

4

2 回答 2

2

您需要告诉 eclipse 使用 UTF-8 作为其标准输出控制台。您可以通过 Window > Preferences > General > Workspace > Text File Encoding 进行设置。

在此处输入图像描述

于 2013-07-23T08:22:20.803 回答
2

首先,您需要确保您的源文件实际存储为UTF-8- 请参阅@Ankur 的答案以获得很好的解释。

然后,您还需要在调用检索字节数组时提供getBytes()编码String

byte sByte[] = Cdata.getBytes("UTF-8"); 

如果您String.getBytes()在没有编码的情况下调用,则使用平台的默认编码,它可以是(几乎)任何东西。另请参见java.lang.String.getBytes()

使用平台的默认字符集将此字符串编码为字节序列

有了这个,以下 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);
   }
}
于 2013-07-23T08:17:17.710 回答