繁体   English   中英

在iPhone上检测NSString中的Unicode字符

[英]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。 你可以在这里阅读有关的差异:

http://en.wikipedia.org/wiki/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中的东西隐藏了&nbsp; 但它出现在NSArray描述中,所以你可能认为你没有删除Unicode。

将尝试另一种替换字符的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM