1

stringWithFormat @ "%ls"を使用して実行していますが、コピーされた最初の文字のみが表示されます。これにより、1バイト文字であると想定されているように見えます。

何か案は?

4

4 に答える 4

5

を使用し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 です)。

于 2010-04-09T21:16:11.800 に答える
2

次のコードは私のために働いた:

NSString *pStr = [NSString stringWithFormat:@"%S", GetTCHARString()];

「%S」の部分に注目してください。それが全体の違いを生んだ。

于 2011-10-08T12:42:16.617 に答える
-1

このタスクを解決するために、私はこれを行いました:

@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
于 2011-01-19T15:05:59.307 に答える