如何将 NSString 转换为 TIS-620 编码字符串

问题描述 投票:0回答:2

在苹果文档中,我可以看到有一种方法可以像这样从UTF8字符串转换为ASCII字符串

NSData *asciiData = [theString dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *asciiString = [[NSString alloc] initWithData:asciiData encoding:NSASCIIStringEncoding];

但是我的应用程序需要 TIS-620 字符串才能发布到网站,所以我尝试做同样的事情

NSData *asciiData = [newPost.header dataUsingEncoding:kCFStringEncodingMacThai allowLossyConversion:YES];
NSString *asciiString = [[NSString alloc] initWithData:asciiData encoding:kCFStringEncodingMacThai];
NSLog(@"%@", asciiString);

我得到的输出是这样的????????????.

有人知道如何正确地将 NSString 转换为 TIS-620 吗? 非常感谢。

iphone objective-c nsstring
2个回答
2
投票

首先,TIS-620 是 ISO-8859-11 的子集,因此您应该使用字符串编码 kCFStringEncodingISOLatinThai 而不是 kCFStringEncodingMacThai。

此外,CF 编码不能直接用于解码 NSString。您需要先将CF编码转换为NS编码。

NSStringEncoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingISOLatinThai);
NSData *asciiData = [newPost.header dataUsingEncoding:enc allowLossyConversion:YES];

0
投票

非常感谢你,在尝试在屏幕上显示一些泰语文本从字节数组返回 NSString 后,我也遇到了这个问题,下面是我编写的代码

 NSData* temp = [NSData dataWithBytes:pbRecvBuffer length:pcbRecvLength];
 NSString *string = [[NSString alloc] initWithData:temp encoding:CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingISOLatinThai)];
© www.soinside.com 2019 - 2024. All rights reserved.