2016-07-07 13 views
-2

私はマルチプラットフォームアプリケーションを作成しようとしています。 Windowsストアアプリケーション(winrt)側でファイルを開き、Windowsのwchar_t、UTF16であるPlatform :: String形式でそのパスを読み取ります。しかしUTF16(Windows wchar_t)をC++でUTF8に変換する英語以外の文字が壊れています(韓国語)

 Platform::String^ copyPath = copy->Path; 
     std::wstring source(copyPath->Data()); 
     std::wstring_convert<std::codecvt_utf8_utf16<wchar_t >, wchar_t > convert; 
     std::string u8CopyPath = convert.to_bytes(source); 

、私はu8CopyPathをチェックしてください。私のコアロジック以来

は、標準C++のデータ型を使用するだけで独立したプラットフォームであり、私はこのコードを経由してUTF8でのstd ::文字列にパスを変換しましたデバッガでは、英語以外の文字に壊れた文字が表示されます。私が知る限り、UTF-8は1文字に複数のバイトを使用できるので、英語以外の言語を完全にエンコードすることができます。変換の中に英語以外の文字を壊すものがありますか?

+0

これはC++ではありません。どのような方言を使っていますか? –

+1

あなたはそれが壊れていると思いますか?デバッガで表示されるものとして表示できますか? (好ましくは16進数で) – mvidelgauz

+2

'私が知っている限り、UTF-8は英語以外の言語を完全にエンコードすることができます'はい。しかし、Visual Studioとそのデバッガ出力はUTF8を処理できない可能性があります。結局のところ、マイクロソフトの製品のほとんどは、UTF8のサポートがないか、あるいは制限されているだけです。 – deviantfan

答えて

0

これは単なるデバッガのことです。一度それをファイルに書き込んで調べたら、正しく出力されました。

+0

これは正常な動作です。デバッガは 'char *'をMBCS文字列として解釈します。別のエンコーディングを使用している場合は、[C++形式指定子](https://msdn.microsoft.com/en-us/library/75w45ekt.aspx)を使用して、デバッガのヒントを提供する必要があります。 'mystring、s8' – IInspectable

関連する問題