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文字を処理する場合は厳密な仕様であり、優れたパーサー/ジェネレーターは、テキストを挿入するときにその要素を考慮に入れます。

たとえば、のこぎりを使用して:

# 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 に答える