2011-12-05 20 views
0

wchar_t *をchar *に変換しようとしています。ここに私のコードは次のとおりです。iOS上でwchar_t *をchar *に変換する

size_t result = wcstombs(returned, str, length + 1); 
if (result == (size_t)-1) { 
    int error = errno; 
} 

それは確かに失敗し、エラーが92(ENOPROTOOPT)で満たされている - プロトコルは利用できません。

私もロケールを設定しようとしました:

setlocale(LC_ALL, "C"); 

、あまりにもこの1:

setlocale(LC_ALL, ""); 

私はちょうど静的キャストで文字をスローするように誘惑しています!

+2

ロケールは、変換の*結果*にのみ影響します。いずれにしても、ソースワイド文字列が "システムのワイドエンコーディング"でエンコードされていることを確認する必要があります。基本的には、ワイド文字列は 'mbstowcs()'コール、またはWCHAR_Tへの 'iconv()'変換の結果でなければなりません。 [これは私の質問です](http://stackoverflow.com/questions/6300804/wchars-encodings-standards-and-portability)この件に関する。 –

答えて

0

ソース文字列が非標準のエンコーディング(ワイド文字ごとに2文字のASCII文字)でエンコードされていた問題が発生していたようですが、デバッガで正常に見えましたが、生成されたエラーコードは明確に文書化されていませんが、単にそのテキストをデコードできないことに相当します。

関連する問題