【问题标题】:XML UTF-8 data being written differentlyXML UTF-8 数据的写入方式不同
【发布时间】:2010-11-24 02:13:41
【问题描述】:

不幸的是,我正在一个名为 uniPaaS 的不起眼的平台上工作,所以我可能正在寻求一些与平台无关的建议。

我有一个 Web 服务请求,其中 XML 文档包含那些烦人的智能引号。字符的字节数据为E2 80 99(即00002019 RIGHT SINGLE QUOTATION MARK

当我将 XML 文件写入暂存服务器上的磁盘时,它会正确写入。当我在我们的生产服务器上编写它时,它完全改变了这些字节的值并使 XML 文档格式不正确:

E2 80 99 变为 92。有没有人见过这种行为?似乎只有一个字节的字符串(但 SOAP 响应有 50Mb 大,所以我没有机会区分整个文件)。

【问题讨论】:

  • 信息太少了。请简要描述您的平台。另外:文件是如何写入磁盘的?分期和生产之间有什么区别?具体写什么程序?等等等等等等。
  • @sleske,我无法真正提供这些信息,因为环境 (uniPaaS) 是 RAD P/SaaS 工具,因此所有这些信息都被抽象掉了。这两个系统是相同的(彼此的克隆版本),但 Ignacio 能够发现两个文件之间的模式,这很有帮助。
  • 如果您还没有从 Ignacio 的回答中弄清楚,E2 80 99 不会变成 92 73 20,它只会变成 927320 是以下字符。
  • @Laurence - 是的,在他回答之后我确实看到了。我自己没有注意到,但在看到他的代码后我注意到了(这也解释了大约 50,000 条记录的文件大小存在 3kb 的差异)。

标签: xml utf-8


【解决方案1】:

它将其编码为 CP1251。

>>> '\x92'.decode('cp1251').encode('utf-8')
'\xe2\x80\x99'

【讨论】:

  • 太棒了,谢谢。我现在知道问题出在哪里,这不是我能解决的问题,我必须向平台开发人员打开一个错误报告。
  • 干得好。当我们忙于猜测时:也许问题在于某些编码器默认为标准操作系统编码(例如,Java 喜欢这样做)。如果两个系统上的标准 OS 编码设置不同,则可能会导致问题。
猜你喜欢
  • 2015-01-27
  • 2012-04-20
  • 2012-06-24
  • 1970-01-01
  • 1970-01-01
  • 2011-03-16
  • 1970-01-01
  • 2014-02-03
  • 1970-01-01
相关资源
最近更新 更多