2013-01-23 2 views
0

우리는 CMS를 사용합니다. CMS는 인코딩과 관련하여 사용하기에 정말 고통 스럽지만 여전히 구조를 생성해야합니다. 내가 그들을 제거하는 경우,Ruby는 유효한 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 

파일이 포함 öäü 및 :

내가 설정 : Encoding.default_internal UTF-8로, 나는 # Encoding: UTF-8으로 시도하고 나는 File.open("filename", "w:UTF-8")로 파일을 작성하지만, 난 항상 이런 식으로 뭔가있어 예상대로 작동합니다.

메모장 + + 함수 "BOM없이 UTF-8로 변환"을 사용하고 "Umlaute (öäü)"를 수동으로 작성하면 작동합니다.

값을 ö과 같은 HTML 엔터티로 변경하는 것은 백엔드에서 이러한 방식으로 나타나므로 선택 사항이 아닙니다.

추 신 : JRuby로 작성되었습니다.

+0

XML 파일의 헤더 행에 적절한 인코딩이 있었습니까? :

+0

네, 그 사실을 잊지 마십시오. 나는 심지어 XML을 생성하지 않는다. 나는 단지 작동하는 기본 "템플릿"을 복사하고 제목을 바꾼다. – b1nary

+0

어떻게 제목을 대체합니까? 바꾸기 후에 XML이 엉망이 될 수 있습니까? [xmllint] (http://xmlsoft.org/xmllint.html) 같은 것을 통해 XML을 실행하여 프로세스와 XML 데이터를 개별적으로 검증 해 보았습니까? 텍스트가 CDATA 블록 안에 삽입되고 값이 인코딩 된 형식으로 변환되었거나 여전히 원시입니까? –

답변

0

XML을 어떻게 수정하는지는 말하지 않지만 정규 표현식을 사용하는 경우 gsub을 사용하면 야생면을 걷고있는 것입니다.

XML 파서/생성기를 사용하여 XML을 수정하는 것이 좋습니다. XML은 특히 ASCII가 아닌 문자를 처리 할 때 엄격한 명세입니다. 좋은 파서/생성기는 텍스트를 삽입 할 때 해당 내용을 고려합니다.

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

출력 :

UTF-8로 출력 인코딩 변경

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

:

# 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 

출력 : Nokogiri 등을 사용

, 0

+0

물론 멋지 겠지만 도구는 실제로 모든 종류의 템플릿을 처리해야하며 XML로만 제한해서는 안되지만 어쩌면 내가 nokogiri에서 변환 기능을 빌릴 수 있습니다 ^^ – b1nary

+0

Nokogiri는 XML과 HTML 만 구문 분석합니다. libXML에 의존하기 때문에 다른 어떤 것을 파싱하거나 생성하지 않아도됩니다. 어떤 종류의 파일인지 알기에는 쉽고 조건부로 그 파일을 사용하면 Nokogiri가 할 수있는 물건에만 사용될 수 있습니다. –

+0

내 'str.gsub ('ä ','ä ') .gsub ("ü",'ü ') .gsub ('ä ','ö ')로 무엇을하는지 검색하고 싶습니다.) .force_encoding ('Windows-1252'). encode ("UTF-8")'실제로 작동하지 않는 것은 아무것도하지 않습니다 ... 또한 "이 라이브러리 사용"은 내가 생각하고 있던 대답이 아닙니다. Nokogiri에는 무관심이 있습니다. 아직도 당신의 도움을 위해 thx – b1nary

관련 문제