2016-07-08 8 views
2

私は、既存のWindows CE製品群の多言語バージョンを作成しようとしています。私はUTF8(BOMなし)のエンコードされたファイルを持っていて、それを読んでそれをMessageBoxに表示しようとしています。Windows CE、UnicodeおよびVisual Studio 2008

私はCPPファイルにUnicode文字を置き、そのように表示しても表示されない文字は表示されますが、運が悪いです。

私はUTF16、UTF16-LEおよびUTF16-BEファイルを試しましたが、どれも表示できないようです。

私はifstreamとwfstreamとCFileを試しています - 私はまた、私がグーグルで見つけたCStudioFileを試しました。テキストを別のファイルに保存して、それをUnicodeと見なすことができます。私はWindows CEアプリケーションでそれを見ることができません。

注:私は、Unicode文字セットスイッチをオンにしてコンパイルしました。

私はまだファイルを読み込んでいるエンコーディングを調べていませんが、私はそれを保存して、Unicodeとして読むことはできますが、ダイアログには表示しないことができます。

メッセージボックスに表示されるUnicodeテキストを取得するのに役立つヘルプがあります。 Windows CE用のC++ SDKは非常に少なくなっていますが、利用できない多くの新機能があります。また、Visual Studio 2008でコンパイルする必要があります。

EDITコードスニペットは以下のとおりです。 MessageBoxWは正しいテキストを表示しません。これは、エミュレータ上のフォントの問題かもしれません。

CFile file(L"c:\\test\\_utf8.txt", CFile::modeRead); 
int filesize = file.GetLength(); 
CStringA strA; 
file.Read(strA.GetBuffer(filesize), filesize); 
strA.ReleaseBuffer(); 
CStringW strW = CA2W(strA, CP_UTF8); 
strW.AppendChar(0); 
MessageBoxW(0, strW, 0, 0); 
+0

のではなく、誰もが*は*あなたのコードで間違っている可能性がどうなったと思う作り、提供してくださいあなたのコードが実際に何をしているのかを示す[最小限で完全で検証可能な例](http://stackoverflow.com/help/mcve)。誰かが間違っていることをあなたに伝えることができます。 –

答えて

1

WindowsはUTF16-LEを使用します。 MultiByteToWideChar(CP_UTF8, ...)を使用してUTF8UTF16-LEに変換し、Windows API関数を使用してUTF16-LE「ワイド文字列」を表示します。

MFCでは、あなたは、私はひるみで利用可能何かわからない

CFile file(L"c:\\test\\_utf8.txt", CFile::modeRead); 
int filesize = file.GetLength(); 
CStringA strA; 
file.Read(strA.GetBuffer(filesize), filesize); 
strA.ReleaseBuffer(); 
CStringW strW = CA2W(strA, CP_UTF8); 
strW.AppendChar(0); 
MessageBoxW(0, strW, 0, 0); 

使用することができます。 C++標準ライブラリを使用するには、std::fstreamオープン、平野APIにstd::string

std::wstringへのもう一つの例を読んで、変換:

wchar_t* readfile(const wchar_t* filename) 
{ 
    HANDLE handle = CreateFileW(filename, GENERIC_READ, 0, 
      NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); 
    if (handle == INVALID_HANDLE_VALUE) return NULL; 

    wchar_t *wbuf = NULL; 
    int len = GetFileSize(handle, 0); 
    if (len) 
    { 
     char *buf = new char[len]; 
     DWORD temp; 
     ReadFile(handle, buf, len, &temp, 0); 

     int wlen = 
     MultiByteToWideChar(CP_UTF8, 0, buf, len, 0, 0); 
     wbuf = new wchar_t[wlen + 1]; 
     MultiByteToWideChar(CP_UTF8, 0, buf, len, wbuf, wlen); 
     wbuf[wlen] = 0; 
     delete[]buf; 
    } 
    CloseHandle(handle); 
    return wbuf; 
} 

... 
wchar_t *wbuf = readfile(L"c:\\test\\utf8.txt"); 
if (wbuf) 
{ 
    MessageBoxW(0, wbuf, 0, 0); 
    delete[]wbuf; 
} 
+0

私はコードの最初のスニペットを試してみましたが、デバッガと出力ウィンドウに文字列(このテストケースでは)がギリシャ語のテキストとして表示されるようになりました。ちょっとしたことに、私はファイル全体を読むために空白の出力文字列を追跡するのに数時間を費やしました。私はそれを200文字に制限し、OutputDebugStringは現在動作します - 私はギリシャ語としてテキストを見ることができます!私はUTF-8ファイルを読んでいると思いますが、あなたのMFCコードではあります。メッセージボックスにはエミュレータのテキストは表示されませんが、解決する必要のあるフォントの問題が考えられます。 –

+0

私はMessageBoxからダイアログボックスのコントロールに表示しようとしましたが、リソースフォントを "Arial Unicode MS"に変更した後でのみ動作します。答えは今、 "Arial Unicode MS"にMessageBoxフォントを設定する方法を理解することだと思います。 –

+0

次のコードはWinCEでも動作しますか? ':: MessageBoxW(0、L"ελληνική "、0、0);' –

関連する問題