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

67 java utf-8 iso-8859-1 character-encoding java-me

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

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

eri*_*son 95

一般来说,你不能这样做.UTF-8能够编码任何Unicode代码点.ISO-8859-1只能处理其中的一小部分.因此,从ISO-8859-1到UTF-8的转码没有问题.当找到不支持的字符时,从UTF-8向后转到ISO-8859-1将导致文本中出现"替换字符"( ).

要转码文字:

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

要么

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

您可以使用较低级别的CharsetAPI 进行更多控制.例如,您可以在找到无法编码的字符时引发异常,或者对替换文本使用不同的字符.


Bah*_*mir 13

哪个对我 有用:("ü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?"
Run Code Online (Sandbox Code Playgroud)

将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ı"
Run Code Online (Sandbox Code Playgroud)

  • 如果有人需要这个 - 我认为上面的命令将执行以下操作:`a` 将采用 `UTF-8` 的字节,将它们转换为 `ISO` 字节,然后使用 `ISO` 的表 `bytes->chars` ` 编码以打印出字符串。在字符串`b`的情况下,它将使用`UTF-8`的`bytes->chars`表,因此根据`UTF`规则基本上映射`ISO`字节。`a` 将被打印出来,即使它是 `ISO`,因为 Java 不会弄乱它的内部字节存储。`b` 可能会损坏,因为一些 `ISO` 的字符将被打印出来,就好像它们属于 `UTF` 编码一样。 (2认同)

Joh*_*iss 6

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

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

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

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

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

甚至更好(感谢erickson)使用InputStreamReader:

InputStreamReader isr;
try {
     isr = new InputStreamReader(inputStream, encoding);
} catch(UnsupportedEncodingException uee) {
    uee.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)


小智 5

这是字符串输出的简单方法(我创建了一个方法来执行此操作):

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";
Run Code Online (Sandbox Code Playgroud)