编码UTF8的Java问题

编码UTF8的Java问题,java,Java,我认为用一个小例子来解释我的问题最简单: 我开头的字符串是:pÃtes,结果应该是:p–tes。我得到的结果仍然是PÃtes如何解决这个问题 代码如下: private String encode(String string) { try { byte ptext[] =string.getBytes("UTF8"); string = new String(ptext, "UTF8"); } catch (UnsupportedE

我认为用一个小例子来解释我的问题最简单:

我开头的字符串是:
pÃtes
,结果应该是:
p–tes
。我得到的结果仍然是
PÃtes
如何解决这个问题

代码如下:

private String encode(String string) {
    try { 
        byte ptext[] =string.getBytes("UTF8");
        string = new String(ptext, "UTF8");   
    }
    catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }     
    return string;      
}

您的代码有两个问题。首先,您使用的是
UTF8
,但正确的字符集是
UTF-8

第二个是,通过调用
byte ptext[]=string.getBytes(“UTF-8”)您是说这个字符串是UTF-8。然后将其转换为UTF-8,它已经是UTF-8了

我想你的意思是输入是
ISO-8859-1
,你想把它转换成
UTF-8
。(这与您给出的示例输入和输出相符)

尝试:


这假设初始字符串最初是从某处读取的,并且只包含
ISO-8859-1
字符。如注释中所述,您应该尝试确保数据从源正确加载(即,当数据仍然只是一个字节数组时).

您是否查看了eclipse工作区上的编码?您得到的正是您的代码所做的……不是
UTF-8
而不是
UTF8
?这样的方法没有意义。将Java中的
字符串
看作是一个没有附加任何编码的字符序列。如果您想要一个字符
,它必须已经在字符串中。编码只在将字符串转换为字节或相反的方式时才起作用。我认为您的问题是,在您的程序的早期某处,当字符串实际上是UTF-8时,它是用拉丁1或类似的编码读入的。因此,多字节被存储为UNICODE字符串,相当于每个八位字节作为单个字符处理的字符串。编码系统中的任何东西都无法解决此问题,您需要提前解决。不,不要这样做。相反,首先要确保字符串是正确的。“它必须来自某个地方,在那里使用正确的编码就可以了。”亨利说得对。关于这一点,我加了一条说明。我认为答案仍然有效,因为我们不知道原始文件来自何处,如果不使用这种方式,可能无法对其进行正确编码。在“java.io API和java.lang API的规范名称”下列出了
UTF8
,因此我认为这不是问题。thx,是的,对utf-8进行编码并将其编码回utf-8毫无意义。字符串来自http请求。初始值存储在数据库(UTF-8)中。
private String encode(String string) {
    try { 
        byte ptext[] = string.getBytes("ISO-8859-1");
        string = new String(ptext, "UTF-8");   
    }
    catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }     
    return string;      
}