我需要使用perl進行流處理使用UTF-16編碼的1Gb文本文件帶有unix風格結尾的小尾數(即,0x000A只有沒有0x000D在流中)和LE BOM。文件在Windows上處理(還需要Unix解決方案)。通過流處理,我的意思是使用while(<>),逐行讀寫。 會很高興有一個像下面這樣的命令行:
perl -pe「BEGIN {SOME_PREPARATION}; s/SRC/DST/g;」 infile.txt> outfile.txt在Windows中使用BOM和Unix行結束流處理UTF-16文件
用於測試輸入的十六進制轉儲(兩行: 「a」 和 「b」 的字母上的每個): FF FE 61 00 0A 00 62 00 0A 00
處理等S/b/C/G應該給一個輸出端( 「b」 與 「C」 代替): FF FE 61 00 0A 00 63 00 0A 00
PS。現在,在我所有的試驗中,或者CRLF輸出存在問題(0D 0A字節是輸出產生不正確的Unicode符號,並且我只需要0A00而沒有0D00來保持相同的unix樣式),或者每個新線路開關LE/BE,即相同的「a 「在一條線上是奇數線上6100和輸出中偶數線上的0061。
Perl 5.what?有一些差異,我想確保我的答案適合你。 – ikegami 2012-02-25 20:38:36
這很棘手的原因是,Perl添加了:crlf,然後纔有機會添加:編碼(UTF-16le)到句柄,並將它們放入錯誤的順序。 – ikegami 2012-02-25 20:39:49
@ikegami你能解釋一下:crlf的用法?如果以「:crlf:encoding(UTF-16LE)」的形式出現,它會產生什麼? – 2012-02-26 00:49:17