【问题标题】:Converting string from UTF-8 to ANSI and displaying it as UTF-8将字符串从 UTF-8 转换为 ANSI 并将其显示为 UTF-8
【发布时间】:2017-08-09 07:01:47
【问题描述】:

我想用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() 中工作的代码?谢谢。

【问题讨论】:

  • “请提供完整的功能。” -- 对不起,这不是一个“为我写代码”的网站。请访问help center 并阅读How to Ask 了解详情。

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


【解决方案1】:

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

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[] b = {(byte) 99, (byte)97, (byte)116};
String s = new String(b, "US-ASCII");

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

【讨论】:

  • 能否请您提供带有预期签名的函数convert?谢谢。
  • 请显示一个可以将 TEXT1 转换为 TEXT2 的工作版本
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-06
  • 2013-03-02
  • 1970-01-01
  • 2010-11-30
  • 2014-01-27
  • 2019-02-10
相关资源
最近更新 更多