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

标签 java encoding utf-8 character-encoding cp1252

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

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

How to do it with Notepad++

设置起点...

打开 Notepad++ 并单击:编码/以 UTF-8 编码,然后粘贴 TEXT_1:

БългарÑки

获取 TEXT_2

单击:编码/转换为 ANSI,然后单击:编码/编码为 UTF-8。完成。

How to do it with 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() 中运行的代码?谢谢。

最佳答案

“БългарÑ_кД中存在信息丢失; “_”处应该有另一个字符,但 Cp1252 没有将任何字符映射到字节值 0x81。该字节来自将“с”编码为字节序列 0xD1 0x81。

当您直接从源复制损坏的文本时,可能会在剪贴板数据中包含不可打印的控制代码(C1 代码“HOP”,高八位组预设),而 Notepad++ 会获取完整信息。但是,当复制到其他上下文(例如 Java IDE 和此论坛)时,此控制字符可能会丢失。

原始数据需要解码为UTF-8,而不是错误地转换为CP-1252下的文本,剥离控件,然后再次解码为UTF-8。复制粘贴时,从哪里复制?为什么不使用 UTF-8 而不是 CP-1252 读取该文件?

关于java - 将字符串从 UTF-8 转换为 ANSI 并将其显示为 UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45583702/

相关文章:

java - JVM如何调用Swing中的paint?

java - Maven 和 EJB3 - 控制客户端的名称

java - 如何从 HttpServletRequest getParameter 记录 CharConversionException

C++ 标准 :string comparation codification problems

ios - 将 NSString 转换为 NSDictionary 时修复

java用unicode文件名解压zipfile

java - 如何将集合中包含的对象映射到字段,反之亦然?推土机

java - 使用 https SSL 配置在 2 个不同服务器(jboss 中的 app1 和 app2-tomcat)上的 Java 应用程序之间进行通信

c# - 我可以使用 Unicode 解码 HTTP 请求吗?

java - java中 "\uf8ff"是什么意思?