用perl處理含特殊編碼的xml檔案

2021-09-30 05:36:26 字數 695 閱讀 1424

perl對文字具有強大的處理能力。對於xml的處理,perl自帶有xml::dom 和 xml::******兩個模組用來處理xml。

xml::dom過於龐大,而且解析結果是乙個dom樹,操作也不方便。我們更多的是處理小型簡單的xml檔案,所以更多的是採用xml::******。

但不管是dom還是******,當涉及到gb2312和gbk編碼的時候,雖然對perl用encodeing   =   "gb2312 " 指定編碼,但由於一些火星文,

還是常常解析出錯。而且用這兩個模組處理的時候,一旦出錯,就導致整個檔案不能解析。

對於特定的場合,完全可以用perl的正則匹配語法,來處理xml檔案。

比如下面的文字

今日** 【qq**千件秒殺】百事運動 防震緩衝慢跑男鞋 翼神 00

20100605065101

250470602

我想今天買這雙鞋00

20100605065125

250470602

首先,通過下面函式,將每乙個訊息隔開。注意其中訊息可能換行的處理。

sub processmessages}}

然後對每條訊息進行處理

sub processonemsg

}這樣,完全規避了對其中非ascii編碼的處理。不管什麼編碼格式,都可以處理。

一旦有個別訊息不能處理,丟棄的只是個別訊息,而不會影響整個檔案的處理。

Perl中文編碼的處理

在perl內部,字串結構由兩部分組成 資料和utf8 flag.例如 utf8 flag 資料 on 中文 如果utf8 flag為on的話,perl就會把 中文 當成utf8字串來處理,如果utf8 flag為off,perl就會把他當成octets來處理.所有字串相關的函式包括正規表示式都會受u...

SAX解析含特殊字元的xml文件(java)

一 不含自定義字元或含較少量的特殊字元 一般的特殊字元有五個 單引號 雙引號 這些字元如果直接出現在xml文件中,一般是不能解析出來的,如解析a b時會報錯。解決方法有兩個 1.用標記 2.轉義。1.用標記 對於含特殊字元的element用標記起來即可成功解析,如 該方法簡單但不實用,對於每個含特殊...

Perl語言入門 用正規表示式處理文

用s 替換 將指定變數合乎模式的部分替換為另乙個串 he s out bowling with barney tonight.s bareny fred 把barney替換為fred print n 如果匹配失敗,則什麼事都不會發生,變數也不受影響 全域性替換 g 即使有其他可以替換的部分,s 也只...