我在Firefox中遇到字符编码问题。当我从Microsoft Word(2007)复制/粘贴一个段落时,它可能包含这样的特殊字符(用于制作列表或引号的点/方块):
Te’st
Ze’f
• Gzg’a
引用’
与此引用'
(使用键盘直接键入)相比有所不同。所以我将它粘贴到textarea并保存(在某些情况下使用AJAX)。在数据库(具有整理latin1_swedish_ci)中,它显示完全正常。但是当使用Firefox再次编辑这些数据时,它会显示奇怪的二进制符号。适用于Chrome和IE。
我不想修改数据库的charset。有没有办法解决这个问题?
注意:您还可以通过在Chrome和FF中查看此帖子进行测试
答案 0 :(得分:0)
您复制的字符(假设它们被正确传输到此论坛中)除了字母之外还包含三次出现的U + 2019 RIGHT SINGLE QUOTATION MARK,这是英语和许多其他语言中正确的标点符号撇号,一次出现U + 2022 BULLET,听起来不错,两次出现U + F0A7,属于私人使用(PU)范围,不应用于公共信息交换,仅用于特殊目的,有关各方之间的相互协议。
Word 2007文档中的某些符号可能会在复制和粘贴时转换为PU字符,但至少正常的列表项目通常会变为U + 2022 BULLET。所以PU字符的来源有点神秘。
关于单引号,它们也可以在windows-1252中表示,latin1_swedish_ci似乎覆盖它(尽管据我所知,它只是整理顺序的定义,而不是字符编码) 。正如您所说,数据在数据库中看起来很好,似乎问题在于将数据写入提供给浏览器的HTML文档中。
特别是,如果随后呈现数据的页面的编码是UTF-8,并且实际数据存在于windows-1252编码中,则会出现问题。这将意味着你所描述的问题,因为U + 2019在windows-1252中被编码为0x92,这在解释为UTF-8时会导致字符级数据错误。
您可以在查看结果页面时使用“查看”→“在Firefox中编码”来查看情况。如果我的假设是正确的,你会看到在那里选择UTF-8,并将其改为“西欧(windows-1252)”会使单引号出现(并且可能会彻底弄乱页面上的其他内容)。