如何在Java中转换ISO-8859-1和UTF-8?

有谁知道如何将string从ISO-8859-1转换为UTF-8并返回到Java?

我从网上获取一个string并将其保存在RMS(J2ME)中,但我想保留特殊字符,并从RMS获取string,但使用ISO-8859-1编码。 我该怎么做呢?

一般来说,你不能这样做。 UTF-8能够编码任何Unicode代码点。 ISO-8859-1只能处理其中的一小部分。 所以,从ISO-8859-1到UTF-8的转码是没有问题的。 从UTF-8向后翻到ISO-8859-1会导致在find不支持的字符时在您的文本中出现“replace字符”( )。

转码文字:

byte[] latin1 = ... byte[] utf8 = new String(latin1, "ISO-8859-1").getBytes("UTF-8"); 

要么

 byte[] utf8 = ... byte[] latin1 = new String(utf8, "UTF-8").getBytes("ISO-8859-1"); 

您可以使用较低级别的Charset API进行更多控制。 例如,可以在find不可编码的字符时引发exception,或者使用其他字符replace文本。

如果你有一个String ,你可以这样做:

 String s = "test"; try { s.getBytes("UTF-8"); } catch(UnsupportedEncodingException uee) { uee.printStackTrace(); } 

如果你有一个'破'的String ,你做错了什么,转换一个String在另一个编码的String是不可避免的不走的路! 您可以将String转换为byte[] ,反之亦然(给定编码)。 在Java中, String是用UTF-16编码的AFAIK,但这是一个实现细节。

假设你有一个InputStream ,你可以在一个byte[]读取,然后使用它将其转换为String

 byte[] bs = ...; String s; try { s = new String(bs, encoding); } catch(UnsupportedEncodingException uee) { uee.printStackTrace(); } 

甚至更好(谢谢埃里克森)使用InputStreamReader

 InputStreamReader isr; try { isr = new InputStreamReader(inputStream, encoding); } catch(UnsupportedEncodingException uee) { uee.printStackTrace(); } 

哪些工作对我来说:( “üzümbağları”是正确的写在土耳其语)

将ISO-8859-1转换为UTF-8:

 String encodedWithISO88591 = "üzüm baÄları"; String decodedToUTF8 = new String(encodedWithISO88591.getBytes("ISO-8859-1"), "UTF-8"); //Result, decodedToUTF8 --> "üzüm bağları" 

将UTF-8转换为ISO-8859-1

 String encodedWithUTF8 = "üzüm bağları"; String decodedToISO88591 = new String(encodedWithUTF8.getBytes("UTF-8"), "ISO-8859-1"); //Result, decodedToISO88591 --> "üzüm baÄları" 

这是一个简单的方法与string输出(我创build了一个方法来做到这一点):

 public static String (String input){ String output = ""; try { /* From ISO-8859-1 to UTF-8 */ output = new String(input.getBytes("ISO-8859-1"), "UTF-8"); /* From UTF-8 to ISO-8859-1 */ output = new String(input.getBytes("UTF-8"), "ISO-8859-1"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return output; } // Example input = "Música"; output = "Música"; 

Apache Commons IO Charsets类可以派上用场:

 String utf8String = new String(org.apache.commons.io.Charsets.ISO_8859_1.encode(latinString).array())