Unicode
如何在多個文件中用 UTF-8 字元替換 Unicode 程式碼數字?
我有 500 個包含轉義 Unicode 字元的文件,如下所示:
Albert Vel\u00e1zquez V\u00e9ronique Ekin
等等。數據是通過腳本通過
XMLHttpRequest
s 從伺服器查詢的,我假設引用的類型源於那裡。如您所見,每個都
\u00xx
需要替換為相應的特殊字元:\u00e1 -> á \u00e9 -> é
等等
問題:如何在所有文件中以非互動方式用它們各自的 UTF-8 對應物替換這些程式碼序列?
Unicode 程式碼點似乎都是 8 位的,但無法檢查所有出現(太多)。也許多字節字元會顯示為
\u00xx\u00yy
?或者\uxxyy
,如果這是某種 7 位乾淨的 UTF-16?我希望這裡有人能辨識字元表示(我在網上找不到)並且可以推荐一個正確處理多字節序列的腳本。編輯:請注意,
iconv
無法處理文件格式:# iconv --list | wc -l 1179
iconv
知道 1179 種編碼。試一試:# foreach enc ( `iconv --list | tr -d /` ) foreach? echo ==== $enc >> enctest foreach? echo 'Vel\u00e1zquez' | iconv -f $enc -t UTF-8 >> enctest foreach? end # grep -a --before=1 Velázquez enctest Exit 1
該文件不包含正確的字元串:-(
一種選擇是通過
echo
(或printf
)解析它。#!/bin/bash IFS= while read -r line ; do printf '%b\n' "$line" #or: echo -e "$line" #or: printf "$line\n" done <infile >outfile
警告:此方法將解釋所有轉義字元!因此,僅當反斜杠的唯一出現是針對 unicode 字元或 uniterpretable 時,它才會起作用。
例子
$file infile input: ASCII text $cat infile Albert Vel\u00e1zquez V\u00e9ronique Ekin DOS Path: C:\data\user\file\u123.txt $file outfile outfile: UTF-8 Unicode text $cat outfile Albert Velázquez Véronique Ekin DOS Path: C:\data\user ileǵ.txt
where
\f
被解釋為form feed,\u123
asǵ
, while\d
和\u
(ser) 沒有解釋。