2011-06-13 43 views
3

我有它的樣本數據如下一個巨大的XML文件:
如何轉換XML文件,該文件是在非UTF-8格式的XML是UTF-8兼容

<vendor name="aglaia"><br> 
       <vendorOUI oui="000B91" description="Aglaia Gesellschaft für Bildverarbeitung ud Kommunikation m" /><br> 
     </vendor><br> 
     <vendor name="ag"><br> 
       <vendorOUI oui="0024A9" description="Ag Leader Technology" /><br> 
     </vendor><br> 

,因爲它可以看到有文字「法理社會fürBildverarbeitung」,這是不是UTF-8兼容的,因爲它,我從XML驗證收到錯誤,如錯誤:

 
Import failed: 
com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence. 

所以查詢是如何照顧這在Linux環境下將xml文件轉換爲UTF-8兼容格式?或者有沒有在bash中的方法,以便在首先創建xml時,我可以確保所有變量/字符串都以UTF-8兼容格式存儲?

+0

當前的XML標頭是否指定編碼?即是否有這樣的標題:'<?xml version =「1.0」encoding =「UTF-8」?>'如果是,編碼是什麼?如果文件沒有這個頭文件,你知道實際的編碼嗎? – 2011-06-13 21:39:00

+0

這是我的腳本在創建xml時添加的頭文件,但正如我所說的那樣,它只是迴應到xml :: <?xml version =「1.0」encoding =「UTF-8」?> Nohsib 2011-06-13 21:45:50

+0

真實問題是生成的XML是否有效,基於此,您必須更改XML生成器或使用能夠處理有效編碼的通用XML解析庫。 – sorin 2011-06-13 22:39:26

回答

3

使用的字符集轉換工具:

iconv -f ISO-8859-1 -t UTF-8 filename.txt 

gnu-page

...並在文件http://standards.ieee.org/develop/regauth/oui/oui.txt 「aglia」(如在你上面的例子)報告爲:

00-0B-91 (hex)   Aglaia Gesellschaft für Bildverarbeitung und Kommunikation m 
000B91  (base 16)  Aglaia Gesellschaft für Bildverarbeitung und Kommunikation m 
          Tiniusstr. 12-15 
          Berlin D-13089 
          GERMANY 

它看起來像「ü」是獲得mangeld的角色。

更新

當下載 「oui.txt」 使用wget,我看到了文件中的字符 「ü」。如果你沒有在下載中破壞某些東西。考慮使用下列操作之一:使用curl -o oui.txt

  • wget --header='Accept-Charset: utf-8'
  • 會轉而

如果以上都沒有效果的,只是打開你喜歡的瀏覽器鏈接,做一個「另存爲」。在這種情況下,請在下面的腳本中註釋wget行。

我有以下腳本(更新BEGIN & END得到有效的XML文件)

#!/bin/bash 

wget http://standards.ieee.org/develop/regauth/oui/oui.txt 
iconv -f iso-8859-15 -t utf-8 oui.txt > converted 

awk 'BEGIN { 
     print "HTML-header" 
    } 

    /base 16/ { 
     printf("<vendor name=\"%s\">\n", $4) 
     read 
     desc = substr($0, index($0, $4)) 
     printf("<vendorOUI oui=\"%s\" description=\"%s\"/>\n", $1, desc) 
    } 
    END { 
     print "HTML-footer" 
    } 
    ' converted 

希望這有助於成功!

+1

假定當前的代碼頁是ISO-8859-1,它可能不是。 – 2011-06-13 21:41:46

+0

好,是的,從iconv男人的例子中複製出來的副本。 – 2011-06-13 21:43:14

+0

是沒有工作:( – Nohsib 2011-06-13 21:44:39