2012-04-26 3 views
1

ANSI 형식으로 인코딩 된 파일 하나 (ANSI 형식으로 인코딩 된 Notepad ++로 표시)와 특수 문자 (섭씨, 파운드 등) 모든 문자를 유니 코드로 변환합니다.ANSI 형식 파일을 유니 코드 형식으로 변환하는 방법

C/C++ 또는 Qt에서 ANSI를 유니 코드로 변환하려면 어떻게해야합니까?

+0

'ANSI'인코딩이란 무엇입니까? ISO-Latin-1입니까? 어쩌면 리눅스에서'iconv' 명령을 시도해 볼 수 있을까요? –

+0

Basile : ANSI는 Windows에서 레거시 8 비트 인코딩을 나타냅니다. 텍스트 파일은 대개 유니 코드가 아니고 인코딩 대신 시스템간에 이식성이 거의 없습니다. 언어와 로케일 설정에 따라 다르므로 특별한 인코딩이 아닙니다. 미국이나 서유럽의 기계에서는 대개 코드 페이지 1252입니다. 그러나 원하는대로 설정할 수 있습니다. – Joey

답변

1

내 Qt는 여전히 매우 녹슨이지만, 다음과 같은 라인을 따라 뭔가 :

QFile inFile("foo.txt"); 
if (!inFile.open(QIODevice::ReadOnly | QIODevice::Text)) 
    return; 

QFile outFile("foo.out.txt"); 
if (!outFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) 
    return; 

QTextStream in(&inFile); 
QTextStream out(&outFile); 
out.setCodec("UTF-8"); 

while (!in.atEnd()) { 
    QString line = in.readLine(); 
    out << line; 
} 

은 파일 읽기 및 쓰기에 대한 예제를 포함 둘 QFileQTextStream의 문서에서 함께 재현 . QTextStream의 기본값은 레거시 인코딩을 사용하기 때문에 출력의 명시적인 인코딩을 설정하면됩니다 QTextStream. 파일이 너무 크지 않으면

당신은 아마 또한

out << in.readAll(); 

대신 라인을 통해 루프로 사용할 수 있습니다. 루프는 특히 출력 파일에 후행 줄 바꿈을 추가 할 수 있습니다 (단, 문서에서는 그다지 명확하지 않습니다).

+0

'setCodec ("UTF-8")이 왜 필요한가요? 기본 코덱은'codecForLocale'이며,이 경우에는 "ANSI"입니다. – MSalters

+0

왜냐하면 그들은 ANSI가 아니라 유니 코드를 원하기 때문입니다. * reading *의 경우 기본 코덱으로 충분하지만 쓰기에는 적합하지 않습니다. 흠, 기억에 남을 표현이 필요하다는 점에서 제가 오해 한 것 같습니다. 그렇다면 전체 파일 쓰기 작업은 불필요합니다. – Joey

+0

아 맞아. 그건 의미가 있습니다, 나는 당신의 코드를 잘못 읽었습니다. – MSalters

0

그냥 QTextStream으로 읽으십시오. QTextCodec::codecForLocale이 적용되며, 기본 ("ANSI") 8 비트 문자의 유니 코드 변환이 사용됩니다.

ANSI 텍스트 파일을 ANSI라는 개념이 없기 때문에 Mac 또는 Linux로 복사 한 경우에는 작동하지 않습니다. 그 (것)들을 위해, ANSI 원본 파일은 ASCII 같이 일 것이다 그래서 당신은 Unicode (UTF-8)로 첫째로 개조하고 그 때 베낀다.

관련 문제