我们使用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”并在其中手动编写“Umlaute(öäü)”,它就可以工作。
将值更改为ö
等HTML实体是不可取的,因为它们会以这种方式出现在后端。
PS:用JRuby写的。
答案 0 :(得分: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>öäü</atextnode>
</root>
将输出编码更改为UTF-8:
puts doc.to_xml(encoding: 'UTF-8')
输出:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<atextnode>öäü</atextnode>
</root>