0

我们使用 CMS,在编码方面使用起来真的很痛苦,但我仍然需要为它生成一个结构。

我将:设置Encoding.default_internal为 UTF-8,我尝试使用# Encoding: UTF-8并编写了文件,File.open("filename", "w:UTF-8")但我总是得到这样的结果:

DOMDocument::loadXML() [domdocument.loadxml]: Input is not proper UTF-8, indicate encoding ! Bytes: 0xF6 0x6A 0xE4 0x6B in Entity, line: 7DOMDocument::loadXML() [domdocument.loadxml]: Empty string supplied as input

该文件包含öäü,如果我删除它们,它会像预期的那样工作。

如果我使用 Notepad++ 功能“转换为没有 BOM 的 UTF-8”并在其中手动写入“元音变音(öäü)”,它就可以工作。

将值更改为 HTML 实体(如ö, )是没有选择的,因为它们会以这种方式出现在后端。

PS:它是用 JRuby 编写的。

4

1 回答 1

0

你没有说你是如何修改 XML 的,但是如果你是用正则表达式来做的,那么gsub你就是在狂野的一面。

我强烈建议使用 XML 解析器/生成器来修改 XML。XML 是一个严格的规范,尤其是在处理非 ASCII 字符时,一个好的解析器/生成器会在插入文本时考虑到这些东西。

例如,使用Nokogiri

# encoding: utf-8

require 'nokogiri'

doc = Nokogiri::XML(<<EOT)
<root>
  <atextnode>content</atextnode>
</root>
EOT

atextnode = doc.at('atextnode')
atextnode.content = "öäü"
puts doc.to_xml

输出:

<?xml version="1.0"?>
<root>
  <atextnode>&#xF6;&#xE4;&#xFC;</atextnode>
</root>

将输出编码更改为 UTF-8:

puts doc.to_xml(encoding: 'UTF-8')

输出:

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <atextnode>öäü</atextnode>
</root>
于 2013-01-23T16:24:53.730 回答