1

私はウルドゥー語のヒンディー語の翻訳/音訳に取り組んでいます。私の目的は、ウルドゥー語の文をヒンディー語に、またはその逆に翻訳することです。私は、c++言語でビジュアルc++2010ソフトウェアを使用しています。UTF-8形式で保存されたテキストファイルにウルドゥー語の文を書きました。ここで、そのファイルから1文字ずつ取得して、同等のヒンディー語文字に変換できるようにします。入力ファイルから単一の文字を取得し、この単一の文字を出力ファイルに書き込もうとすると、出力ファイルに未知の醜い文字が配置されます。親切に適切なコードで私を助けてください。私のコードは次のとおりです

#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;
   }
4

2 に答える 2

2

Windowsを使用している場合、「便利な」文字を取得する最も簡単な方法は、ファイルのより大きなチャンク(たとえば、行またはファイル全体)を読み取り、MultiByteToWideChar関数を使用してUTF-16に変換することです。「疑似」コードページCP_UTF8を使用します。多くの場合、UTF-16のデコードは必要ありませんが、参照している言語についてはわかりません。非BOM文字(65535を超えるコード)が予想される場合は、2ワード文字を処理する必要がないように、UTF-16のデコード(またはUTF-8を自分でデコード)を検討することをお勧めします。

必要に応じて、独自のUTF-8デコーダーを作成することもできます。複雑ではなく、入力バイトから適切なビットを抽出し、それらを最終的なUnicode値にアセンブルするには、ビットジャグリングが必要です。

ヒント:WindowsにはNormalizeString()関数もあります。この関数を使用して、ファイルの文字が期待どおりであることを確認できます。これは、Unicodeで複数の表現を持つ文字を「標準」表現に変換するために使用できます。

編集:UTF-8エンコーディングを読み取ると、最初のバイトを読み取り、さらに必要なバイト数を把握し、これらも読み取り、すべてをMultiByteToWideCharまたは独自のデコーダーに渡すことができることが簡単にわかります(もちろん、独自のデコーダーでファイルから読み取ることもできます)。そうすれば、実際に「一度に1文字ずつ読み取る」ことができます。

于 2012-09-29T17:17:16.297 に答える
0

'w'クラスはUTF-8の読み取りと書き込みを行いません。彼らはUTF-16を読み書きします。ファイルがUTF-8である場合、このコードでファイルを読み取ると、ぎこちないものになります。

それをバイトとして読み取ってから変換するか、最初にUTF-16で書き込む必要があります。

于 2012-09-29T16:56:05.347 に答える