当前位置: 首页 > 知识库问答 >
问题:

哪些字符不能直接从Cp1252映射到UTF-8?

隗高旻
2023-03-14

我在几个stackoverflow的答案中读到,当从Cp1252(又名Windows-1252;它们是相同的,不是吗?)转换时,一些字符不会直接映射(甚至“不可映射”)至UTF-8,例如,此处:https://stackoverflow.com/a/23399926/2018047

有人能再解释一下吗?这是否意味着,如果我将源代码从cp1252批量/批量转换为utf-8,我将得到一些最终将成为垃圾的字符?

共有2个答案

亢建白
2023-03-14

有人能再解释一下吗?

cp1252解码功能主要是标识功能。

cp1252    UCP       (UCP = Unicode Code Point)
--------  --------
21        21 (!)    (All numbers in hex)
31        31 (1)
41        41 (A)

这使得它看起来像是期待UCP(而不是UTF-8)也将接受cp1252。链接答案的作者指出情况并非如此。

cp1252    UCP
--------  --------
80        20AC (€)
85        2026 (…)
99        2122 (™)

所有异常都在80到9F之间(含80和9F)。

接受UCP的东西也将接受iso-8859-1,但不接受cp1252。

这是否意味着,如果我将源代码从cp1252批量/批量转换为utf-8,我将得到一些最终将成为垃圾的字符?

没有。cp1252中的每个字符都映射到Unicode Code,因此可以使用适当的工具成功地将其转换为UTF-8。

蒙华翰
2023-03-14

这就是Windows 1252代码页的样子。

如您所见,字节0x81、0x8D、0x8F、0x90、0x9D没有任何分配给它们的内容。

如果输入文件包含这些字节,并且将其视为Windows 1252编码,则这些字节将被视为无效字符。在正常情况下,这意味着输入文件不在Windows 1252中。

所有其他字节编码可打印字符或控制字符,所有这些字符都存在于Unicode中,因此可以明确地编码在UTF-8中。

我不知道链接的答案是什么,它的最后一段听起来像胡说八道。

还有一些评论,可能会对你想知道的事情有所启发:

>

这两种编码都不会将文本编码为特定的字节值,每种情况下都是不同的

此外,某些字节序列在UTF-8中也是无效的

通常,如果您将文件视为包含UTF-8或Windows 1252中编码的文本,但事实并非如此,则会丢失和损坏数据

您可以在IDE或编辑器中选择文件的编码。建议只使用UTF-8。您必须转换现有的Windows 1252文件。

 类似资料:
  • 我在项目中使用Java、Eclipse和Ant。我有一些Java代码需要编辑并在其中添加一些UTF-8字符。以前是我的身材。xml:而且它工作得很好。现在,在我尝试运行时添加这些UTF-8字符之后,它抛出“错误:编码Cp1252的不可映射字符” 谁能告诉我解决办法是什么?我试图改变编码UTF-8和cp1252在xml但没有运气。 我使用的是JRE7、Eclipse开普勒和蚂蚁4.11。

  • 我已经用MapStruct 1.1工作了几天,但还没有达到我所需要的。 我想做的是:我想将JPA实体映射到DTO,以便在Primefaces项目中实现更好的属性视图绑定。 所以我有我的实体如下: 病人JAVA 人JAVA 我想把这些实体画成这样: 耐心等待。JAVA 潘松多。JAVA 我编写了Mapper类和一个实用程序,就像GitHub上的官方示例中描述的那样(https://github.co

  • 和标题一样,杰克逊无法阅读utf-8。 第37行: 21:48:55[严重]com。fasterxml。杰克逊。果心JsonParseException:无效的UTF-8起始字节0xb3位于[Source:(文件);第18行,第38列] 这里是第18行,看不懂UTF-8" "理由":"管理员nie poda的Powodu banicji" 整个StackTrace

  • 我正在尝试将我们的数据库从latin1转换为UTF-8。不幸的是,我不能做一个大规模的单一切换,因为应用程序需要保持在线,我们有700GB的数据库要转换。 因此,我试图利用mysql的一些技巧,将表转换为UTF-8,而不是数据。我希望数据能够被实时读取、转换和替换。(如果愿意,可以进行JIT转换) 我们的php应用程序目前使用所有默认值,所以它使用latin1字符集连接到mysql,并丢弃在lat

  • 本文向大家介绍字符串拼接有哪些方式?哪种性能好?相关面试题,主要包含被问及字符串拼接有哪些方式?哪种性能好?时的应答技巧和注意事项,需要的朋友参考一下 性能最好的是连接: 继续补充:

  • 问题内容: 我试图在这段代码中使用常量而不是字符串文字: 经常出现在代码中,最好是引用一些变量。您知道我可以在JDK中找到这样的变量吗? 顺便说一句,顺便说一句,这样的常数是不好的设计:公共静态文字…不是数据复制的解决方案 问题答案: 在Java 1.7+中,java.nio.charset.StandardCharsets定义用于包括的常量。 对于Android:minSdk 19