여러 파일에서 유니코드 코드를 UTF-8 문자로 바꾸는 방법은 무엇입니까?

여러 파일에서 유니코드 코드를 UTF-8 문자로 바꾸는 방법은 무엇입니까?

다음과 같이 이스케이프된 유니코드 문자가 포함된 파일이 500개 있습니다.

Albert Vel\u00e1zquez
V\u00e9ronique Ekin

데이터는 스크립트를 통해 s를 통해 서버에서 쿼리되며 XMLHttpRequest참조된 유형이 거기에서 발생한다고 가정합니다.

보시다시피, 각 문자를 \u00xx해당 특수 문자로 바꿔야 합니다.

\u00e1 -> á
\u00e9 -> é

등.

질문: 이러한 코드 시퀀스를 모든 파일의 해당 UTF-8 대응 항목으로 비대화식으로 바꾸려면 어떻게 해야 합니까?

유니코드 코드 포인트는 모두 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

한 가지 옵션은 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

경고하다: 이 방법으로 설명하겠습니다.모두탈출한 캐릭터들! 따라서 다음과 같은 경우에만 작동합니다.오직백슬래시는 유니코드 문자에 대한 것이며 해석할 수 없습니다.

$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)는 설명되지 않습니다.

관련 정보