Ruby不将有效的UTF-8写入文件?

Ruby不将有效的UTF-8写入文件?,ruby,encoding,jruby,Ruby,Encoding,Jruby,我们使用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:

我们使用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
该文件包含
öäü
,如果我删除它们,它的工作方式与预期的一样

如果我使用记事本++函数“转换为不带BOM的UTF-8”并在其中手动写入“Umlaute(öäü)”,它就可以工作

将值更改为HTML实体,如
ö,没有选项,因为它们将以这种方式显示在后端


PS:它是用JRuby编写的。

你没有说你是如何修改XML的,但是如果你用正则表达式和
gsub
来修改XML,那你就太疯狂了

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

例如,使用:

产出:

<?xml version="1.0"?>
<root>
  <atextnode>&#xF6;&#xE4;&#xFC;</atextnode>
</root>
<?xml version="1.0" encoding="UTF-8"?>
<root>
  <atextnode>öäü</atextnode>
</root>

öäü

您的XML文件在标题行是否有正确的编码?:是的,我忘了提到这一点。我甚至不生成XML我只是复制一个工作默认的“模板”并替换标题你如何替换标题?替换后XML会被破坏吗?您是否尝试过通过诸如分别验证流程和XML数据之类的方式来运行XML?文本是否插入到CDATA块中,值是否已转换为编码格式,或者它们是否仍然是原始的?我有一个字符串中的模板,然后就是
.gsub({TITLE}),current[:TITLE])
,是的,我尝试了
current[:TITLE].encode(“UTF-8)
。但是对于xmllint的提示,它替换了“Umlaute”“带有
和#xF6
和类似的代码,似乎可以从后端正确解释,然后自动修复页面。1个标题在CDATA中,一个没有,似乎没有任何区别,而且我将字符串显式编码为UTF-8。消息
字节:0xF6 0x6A 0xE4 0x6B
表明输入采用iso-8859-1编码。您是如何读取输入的?您可能需要执行类似于
File.open(“input_File”),“r:iso-8859-1”
,或使用(或可能)处理编码的操作。当然这很酷,但该工具实际上必须处理所有类型的模板,并且不应限于XML,但也许我可以借用nokogiri的一些转换函数^^ nokogiri只解析XML和HTML。您无法让它解析/生成任何其他内容,因为它依赖于libXML。嗅出某件东西是什么类型的文件很容易,并有条件地进行分支,允许Nokogiri仅用于它设计用来做的事情。使用借阅功能,比如在那里搜索他们正在做的事情的源代码,比如我的
str.gsub('ä','ä;')。gsub('u','和#xFC;')。gsub('ä','和#xFC;')。强制编码('Windows-1252')。编码(“UTF-8”)
实际上不做任何可以工作的事情……也“使用此库”“这真的不是我想的答案。Nokogiri有很强的依赖性。仍然为您的帮助thx什么重依赖?libXML是一种标准安装,或者可以轻松地安装在*nix设备上,并且可以轻松地添加到其他操作系统中。如果您使用的是JRuby,如果您必须安装libXML才能让Java正常工作,我不会感到惊讶。该工具仅在windows机器上运行,我需要稍后将其打包到jar中。为此,每个依赖项都是一对多的。但是是的,我真的以为还有更多。不过,你的提示解决了我的问题,&#编码在CMS中得到了修复,目前它对我有效。苏氨酸
puts doc.to_xml(encoding: 'UTF-8')
<?xml version="1.0" encoding="UTF-8"?>
<root>
  <atextnode>öäü</atextnode>
</root>