1

我想用Java我能做的一件事来模仿Notepad++

TEXT_2 = convert(TEXT_1) // where: TEXT_2 = "Български", TEXT_1 = "БългарÑки"

如何使用记事本++

设定起点...

打开Notepad++并单击:Encoding / Encode in UTF-8,然后粘贴TEXT_1

БългарÑки

获取 TEXT_2

单击:Encoding / Convert to ANSI,然后单击:Encoding / Encode in UTF-8。完毕。

如何用 Java 做到这一点

到目前为止,我有以下功能(部分工作):

public static String convert(String text) {
    String output = new String(Charset.forName("Cp1252").encode(text).array(), Charset.forName("UTF8"));
    return output;
}
System.out.println(convert("БългарÑки"));

使用此功能,我得到:

Българ�?ки // where correct is slightly different: Български

有什么想法让它工作吗?

如果可能的话,你能提供在函数内部工作的代码convert()吗?谢谢。

4

1 回答 1

0

这是一个避免为每次转换执行字符集查找的解决方案:

import java.nio.charset.Charset;

private final Charset UTF8_CHARSET = Charset.forName("UTF-8");

String decodeUTF8(byte[] bytes) {
    return new String(bytes, UTF8_CHARSET);
}

byte[] encodeUTF8(String string) {
    return string.getBytes(UTF8_CHARSET);
}

第二种方法:

从字符串转换为字节[]:

String s = "some text here";
byte[] b = s.getBytes("UTF-8");

从 byte[] 转换为 String:

byte[] b = {(byte) 99, (byte)97, (byte)116};
String s = new String(b, "US-ASCII");

当然,您应该使用正确的编码名称。我的示例使用了两种最常见的编码“US-ASCII”和“UTF-8”。

于 2017-08-09T07:11:36.957 回答