複数のファイルでUnicodeコードをUTF-8文字に置き換える方法は?

複数のファイルでUnicodeコードをUTF-8文字に置き換える方法は?

次のようにエスケープされた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

iconv1179のエンコーディングを知っています。すべて試してください:

# 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のように解釈されます。ページ変更\u123as ǵ、while \d、および\u(ser)は説明されていません。

関連情報