将字符串从UTF-8转换为ANSI并将其显示为UTF-8

时间:2017-08-09 07:01:48

标签: java encoding utf-8 character-encoding cp1252

我想模仿Java我可以用Notepad++做的一件事。

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

如何使用Notepad ++

进行操作

设定起点......

打开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()内部工作的代码吗?感谢。

1 个答案:

答案 0 :(得分:0)

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

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转换为byte []:

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”这两种最常见的编码。