2012-09-29 5 views
1

나는 우르두어 힌디어 번역/음역 작업을하고 있습니다. 내 목표는 우르두어를 힌두어로 번역하는 것이며 그 반대도 마찬가지입니다. Visual C++ 2010 소프트웨어를 C++ 언어로 사용하고 있습니다. UTF-8 형식으로 저장된 텍스트 파일에 우르두어 문장을 작성했습니다. 이제는 그 파일에서 하나 하나의 문자를 얻고 싶습니다. 그래서 그 문자를 동등한 힌디어 문자로 변환 할 수 있습니다. 입력 파일에서 하나의 문자를 얻고이 단일 문자를 출력 파일에 쓰려고하면 출력 파일에 알 수없는 추한 문자가 나타납니다. 친절하게 적절한 코드를 도와주세요. 내 코드는 다음과 같습니다.파일에 쓰여진 UTF-8로 인코딩 된 URDU 문자열에서 단일 문자를 가져 오는 방법은 무엇입니까?

#include<iostream> 
#include<fstream> 
#include<cwchar> 
#include<cstdlib> 
using namespace std; 
void main() 
{ 
wchar_t arry[50]; 
wifstream inputfile("input.dat",ios::in); 
wofstream outputfile("output.dat"); 

if(!inputfile) 
{ 
    cerr<<"File not open"<<endl; 
    exit(1); 
} 

while (!inputfile.eof())   // i am using this while just to 
            // make sure copy-paste operation of 
            // written urdu text from one file to 
            // another when i try to pick only one character 
            // from file, it does not work. 

{ inputfile>>arry; } 
    int i=0; 
    while(arry[i] != '\0')   // i want to get urdu character placed at 
            // each-index so that i can work on it to convert 
            // it into its equivalent hindi character 
{ outputfile<<arry[i]<<endl; 
     i++; } 
    inputfile.close(); 
outputfile.close(); 
cout<<"Hello world"<<endl; 
    } 

답변

2

Windows를 사용한다고 가정하면 "유용한"문자를 얻는 가장 쉬운 방법은 파일의 큰 부분 (예 : 줄 또는 전체 파일)을 읽고 MultiByteToWideChar을 사용하여 UTF-16으로 변환하는 것입니다 기능. "pseudo"-codepage CP_UTF8을 사용하십시오. 대부분의 경우, UTF-16을 디코딩하는 것은 필수는 아니지만, 내가 말하는 언어에 대해서는 잘 모릅니다. 비 BOM 문자 (65535 이상의 코드 포함)가 예상되는 경우 2 단어 문자를 처리하지 않아도되도록 UTF-16을 디코딩 (또는 UTF-8을 직접 디코딩)하는 것이 좋습니다.

원하는 경우 사용자 고유의 UTF-8 디코더를 작성할 수도 있습니다. 복잡하지 않고 입력 비트에서 적절한 비트를 추출하여 최종 유니 코드 값으로 어셈블하기 위해 약간의 비트 저글링이 필요합니다.

힌트 : Windows에도 NormalizeString() 기능이있어 파일의 문자가 예상 한 것임을 확인할 수 있습니다. 이것은 유니 코드의 여러 표현을 "표준"표현으로 변환하는 데 사용할 수 있습니다.

EDIT : UTF-8 인코딩을 읽으면 첫 번째 바이트를 읽을 수 있고 필요한 바이트 수를 파악하고이를 읽은 다음 모든 것을 MultiByteToWideChar 또는 자신의 것으로 전달할 수 있습니다 디코더 (자신의 디코더가 물론 파일에서 읽을 수 있지만). 그렇게하면 한 번에 한 글자 씩 읽을 수 있습니다.

+0

안내를 주셔서 감사합니다. 친절하게도 가이드가 어떻게 내 자신의 UTF-8 디코더를 만들 수 있습니까? –

+0

안내를 잘 주셔서 감사합니다. 친절하게 안내해 주시면 어떻게 직접 utf-8 디코더를 만들 수 있습니까? URDU 텍스트 (파키스탄어)는 유니 코드로 2 바이트 문자로 표시되며 각 문자는 11 비트를 사용하므로 각 문자는 2 바이트로 인코딩됩니다. 나는 URD 코드 포인트 값 (유니 코드 URDU 문자의 11 비트)에서 인코딩 된 여분의 유니 코드 비트를 제거한 다음 어떻게 11 비트를 다른 파일 (UTF-8 형식으로 이미 저장되어 있음)에 넣을 수 있는지 명확하지 않다. 내가 혼란 스러움을 이해했으면 좋겠다. –

0

'w'클래스는 UTF-8을 읽고 쓰지 않습니다. 그들은 UTF-16을 읽고 씁니다. 파일이 UTF-8 인 경우이 코드로 파일을 읽으면 횡설수설합니다.

바이트로 읽은 다음 변환하거나 처음부터 UTF-16으로 써야합니다.

+0

바이트로 urdu 텍스트 파일을 읽을 수 있습니까? –