stringWithFormat @ "%ls"を使用して実行していますが、コピーされた最初の文字のみが表示されます。これにより、1バイト文字であると想定されているように見えます。
何か案は?
を使用しinitWithBytes:length:encoding
ます。使用するエンコーディングを知っておく必要がありますwchar_t
。Apple プラットフォームでは UTF-32 だと思います。
#if defined(__BIG_ENDIAN__)
# define WCHAR_ENCODING NSUTF32BigEndianStringEncoding
#elif defined(__LITTLE_ENDIAN__)
# define WCHAR_ENCODING NSUTF32LittleEndianStringEncoding
#endif
[[NSString alloc] initWithBytes:mystring
length:(mylength * 4) encoding:WCHAR_ENCODING]
一般に、wchar_t
あまり移植性がないため、可能な限り使用しないことをお勧めします。特に、どのエンコーディングを使用しているかをどのように把握する必要がありますか? (Windows では UTF-16LE または UTF-16BE であり、OS X、Linux、および iOS では UTF-32LE または UTF-32BE です)。
次のコードは私のために働いた:
NSString *pStr = [NSString stringWithFormat:@"%S", GetTCHARString()];
「%S」の部分に注目してください。それが全体の違いを生んだ。
このタスクを解決するために、私はこれを行いました:
@interface NSString ( WCarToString )
- (NSString*) getStringFromWChar:(const wchar_t*) inStr;
@end
//////////////////////////
@implementation NSString ( WCarToString )
- (NSString*) getStringFromWChar:(const wchar_t*) inStr
{
char* str = new char[wcslen( inStr )+1];
wcstombs(str, inStr, wcslen( inStr )+1 );
NSString* wNSString = [NSString stringWithCString:str encoding:NSUTF8StringEncoding];
delete [] str;
return wNSString;
}
@end