次のようにエスケープされたUnicode文字を含む500個のファイルがあります。
Albert Vel\u00e1zquez
V\u00e9ronique Ekin
データはスクリプトを介してsを介してサーバーから照会され、XMLHttpRequest
参照されたタイプがそこから発生すると仮定します。
ご覧のとおり、各文字を対応する\u00xx
特殊文字に置き換える必要があります。
\u00e1 -> á
\u00e9 -> é
など。
Q:これらのコードシーケンスをすべてのファイルの対応する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
ファイルに正しい文字列が含まれていません。 :-(
答え1
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文字のものであり、解釈できません。
はい
$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
これは次\f
のように解釈されます。ページ変更、\u123
as ǵ
、while \d
、および\u
(ser)は説明されていません。