如何将“Æàìáûë”转换为Java中可读的西里尔文?

时间:2015-04-20 11:53:10

标签: java android

我尝试获取byte,然后使用Utf-8进行转换。

 byte ptext[] = first_name.getBytes();
 Log.i("", new String(ptext,"UTF-8")); 

但是它不起作用。请为我的愚蠢而烦恼。我很困惑。

3 个答案:

答案 0 :(得分:3)

try {
    String s = new String("Æàìáûë".getBytes(StandardCharsets.ISO_8859_1), "Windows-1251");
    Files.write(Paths.get("C:/cyrillic.txt"),
        ("\uFEFF" + s).getBytes(StandardCharsets.UTF_8));
} catch (IOException e) {
    e.printStackTrace();
} 

假设编辑器和编译器设置为UTF-8以具有正确的错误字符串文字。

这会将字符视为单个字节,滥用ISO-8859-1。然后为西里尔语尝试Windows-1251编码(还有其他编码)。 这样我们就有了一个java String(总是用Unicode)。 我们将使用BOM写入UTF-8的文本文件,因此Windows Notepad会将文件标识为UTF-8。

写入任何西里尔语编码都没问题。

Жамбыл

答案 1 :(得分:2)

您的字节数组必须有一些编码。如果您有负值,则编码不能是ASCII。一旦弄明白,就可以使用:

将一组字节转换为String
byte[] bytes = {...}
String str = new String(bytes, "UTF-8"); // for UTF-8 encoding
Log.i("value", str); 

您可以使用一堆编码,查看Sun javadocs.中的Charset类。

答案 2 :(得分:2)

您的原始编码似乎是Cp1251

byte ptext[] = first_name.getBytes();
Log.i("", new String(ptext, "Cp1251")); // <- put it here

结果词是Жамбыл