我想用 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/