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

对windows-1252和UTF-8编码之间的转换感到困惑

寿毅庵
2023-03-14

我有一个旧数据库,声称已将排序规则设置为windows-1252,并将文本字段的内容存储为

我™d

当它显示在遗留的网络应用程序中时,它在浏览器中显示为I'd。浏览器报告一个UTF-8编码的页面。我不知道这种转换是如何完成的(几乎可以肯定的是,它不是通过动态搜索和替换完成的)。这对我来说是个问题,因为我将文本字段(和许多其他类似的字段)从遗留数据库中取出,并放入一个新的UTF-8数据库。新的Web应用程序将新数据库中的文本显示为

我™d

我希望它显示为I'd。我想不出遗留应用程序是如何实现这一点的(Ruby中的一些修改并没有告诉我如何影响字符串的转换I–eu)™d我会)。

我在这里的某个地方打了个结。

共有1个答案

曹涵润
2023-03-14

这可能意味着之前的开发人员搞砸了数据插入(或者你在某个地方搞砸了)。场景是这样的:

  • 数据库连接设置为latin1
  • 应用程序实际将UTF-8发送到数据库
  • 数据库将接收到的数据解释为拉丁文1,并将其存储为拉丁文(解释为™)
  • 应用程序再次查询数据
  • 数据库返回–欧元™ 用拉丁语编码
  • 应用程序将数据解释为UTF-8,结果为'

你基本上需要做同样的曲解来获得好的数据。现在,您可能正在通过utf8连接查询数据库,因此数据库返回€™ 以UTF-8编码。您需要做的是通过latin1连接进行查询,并将数据解释为UTF-8。

有关所有这些的更详细解释,请参阅在Web应用中处理Unicode。

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

  • 在我的Silverlight应用程序中,我得到了一个用windows-1252编码的XML文件。现在我的问题,它不会正确显示,直到Windows-1252字符串转换为UTF8字符串。在一个正常的C#环境中,这不会是一个大问题:在那里我可以做这样的事情: (将字符串的字符编码从windows-1252转换为utf-8) 但是silverlight不支持windows-1252,它只支持unicode

  • 我试图保存一个字符串在希伯来文文件,同时有文件ANSI编码。恐怕所有的尝试都失败了。 PHP文件本身是UTF-8 这是我正在尝试的代码: 由于某种原因,返回false。 另一次尝试是: 这返回一个空字符串。当这不起作用时,将输出字符集更改为Windows-1255的工作。所以函数本身工作,但由于某种原因,它不转换为1252。 我运行这个函数之前和之后的和打印的结果 在图标之前编码是UTF-8,在图

  • 我有UTF-8源数据,我必须创建在Windows 1252字符编码编码的CSV文件。 我尝试了经典功能,但效果不佳。它必须支持转换后的塞尔维亚字符: "čćžšđ" 。 此外,我还尝试转换为CP1252、ISO-8859-1、ISO-8859-2,功能包括:mb_convert_编码、iconv和iconv_set_编码。 有人知道该试试什么吗?

  • 我需要将上传的文件名转换为未知编码的Windows 1252,同时保持UTF-8兼容性。 当我将这些文件传递给控制器(我对其没有任何影响)时,这些文件必须经过Windows-1252编码。然后,该控制器再次生成通过MySQL存储到数据库中的有效文件(名称)列表-因此我需要UTF-8兼容性。传递给控制器的文件名和写入数据库的文件名必须匹配。到目前为止还不错。 在一些罕见的情况下,当转换为“Windo

  • 我正在编写一个PERL脚本,它从一个数据库中读取数据。XLSX Excel文件,并将数据插入Oracle数据库。数据库采用Windows-1252编码,excel文件采用UTF-8编码(据我所知,这是xlsx文件的标准),特殊字符如ö、ü、ű、ő显示为??。正确的转换方法是什么。xlsx文件?在将读取的字符串插入数据库之前,我曾尝试将其转换为windows-1252,并尝试将整个Excel文件转换