[英]Detect Unicode characters in NSString on iPhone
我正在为iPhone开发一个SMS应用程序。 我需要检测用户是否在他们希望发送的NSString中输入了任何unicode字符。
我需要这样做是因为unicode字符在消息中占用更多空间,还因为我需要将它们转换为十六进制等价物。
所以我的问题是如何检测NSString中的unicode字符(我从UITextView中读取)。 另外,我如何将这些字符转换为UCS-2十六进制等效字符?
例如,繁= 7E41,体= 4F53,中= 4E2D,文= 6587
要仅检查ascii字符(或您选择的其他编码),请使用:
[myString canBeConvertedToEncoding:NSASCIIStringEncoding];
如果字符串包含非ascii字符,它将返回NO。 然后,您可以使用以下命令将字符串转换为UCS-2数据:
[myString dataUsingEncoding:NSUTF16BigEndianStringEncoding];
或NSUTF16LittleEndianStringEncoding,具体取决于您的平台。 UCS-2和UTF-16之间存在细微差别。 UTF-16取代了UCS-2。 你可以在这里阅读有关的差异:
我无法让这个工作。
我有一个带有
的html字符串 没有突破空间
</div>Great Guildford St/SouthwarkSt & nbsp;Stop:& nbsp; BM<br>Walk to SE1 0HL<br>
"Great Guildford St/SouthwarkSt \U00a0Stop:\U00a0 BM",
我尝试了3种编码/解码
// NSData *asciiData = [instruction dataUsingEncoding:NSUTF16BigEndianStringEncoding];
// NSString *asciiString = [[NSString alloc] initWithData:asciiData
// encoding:NSUTF16BigEndianStringEncoding];
// NSData *asciiData = [instruction dataUsingEncoding:NSASCIIStringEncoding];
// NSString *asciiString = [[NSString alloc] initWithData:asciiData
// encoding:NSASCIIStringEncoding];
//little endian
NSData *asciiData = [instruction dataUsingEncoding:NSUTF16LittleEndianStringEncoding];
NSString *asciiString = [[NSString alloc] initWithData:asciiData
encoding:NSUTF16LittleEndianStringEncoding];
这些都没有奏效。 他们似乎在工作,好像我NSLog它看起来不错的字符串
NSLog(@"HAS UNICODE :%@", instruction);
..do encode/decode
NSLog(@"UNICODE AFTER:%@", asciiString);
哪个输出
HAS UNICODE: St/SouthwarkSt Stop: BM
UNICODE AFTER: St/SouthwarkSt Stop: BM
但我碰巧将这些存储在NSArray中,我碰巧调用[stringArray description]
并且所有的unicode仍然在那里
instructionsArrayString: (
"Great Guildford St/SouthwarkSt \U00a0Stop:\U00a0 BM",
"Walk to SE1 0HL"
)
所以NSLog中的东西隐藏了
但它出现在NSArray描述中,所以你可能认为你没有删除Unicode。
将尝试另一种替换字符的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.