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

Confused about conversion between windows-1252 and UTF-8 encoding

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

I’d

当它在旧版网络应用程序中显示时,它在浏览器中显示为 I’d。浏览器报告页面编码为 UTF-8。我无法弄清楚该转换是如何完成的(几乎可以肯定它不是通过即时搜索和替换)。这对我来说是个问题,因为我正在将文本字段(以及许多其他类似的字段)从遗留数据库中提取到新的 UTF-8 数据库中。新的 Web 应用程序将新数据库中的文本显示为

I’d

我希望它显示为 I’d。我无法弄清楚遗留应用程序是如何实现这一点的(Ruby 中的一些摆弄并没有向我展示影响将字符串 I’d 转换为 I’d 的方法)。

我在这里某处打了一个结。

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

  • 数据库连接设置为latin1
  • app 实际发送 UTF-8 到数据库
  • 数据库将收到的数据解释为 latin1,并按原样存储(将 ’ 解释为 ’)
  • 应用再次查询数据
  • 数据库 returns 编码在 latin1
  • app 将数据解释为 UTF-8,导致'

你基本上需要做同样的误解才能得到好的数据。现在您可能正在通过 utf8 连接查询数据库,因此数据库 returns 以 UTF-8 编码。您需要做的是通过 latin1 连接查询并将数据解释为 UTF-8。

有关所有这些的更详细说明,请参阅 Handling Unicode Front To Back In A Web App