在iPhone上检测NSString中的Unicode字符

在iPhone上检测NSString中的Unicode字符,iphone,unicode,nsstring,hex,Iphone,Unicode,Nsstring,Hex,我正在为iPhone开发短信应用程序。我需要检测用户是否在他们希望发送的NSString中输入了任何unicode字符 我需要这样做是因为unicode字符在消息中占据了更多的空间,还因为我需要将它们转换为十六进制的等价物 因此,我的问题是如何检测NSString(我从UITextView读取)中是否存在unicode字符。此外,如何将这些字符转换为其UCS-2十六进制等价物 例如繁 = 7E41,体 = 4F53,中 = 4E2D,文 = 6587要仅检查ascii字符(或您选择的其他编码),

我正在为iPhone开发短信应用程序。我需要检测用户是否在他们希望发送的NSString中输入了任何unicode字符

我需要这样做是因为unicode字符在消息中占据了更多的空间,还因为我需要将它们转换为十六进制的等价物

因此,我的问题是如何检测NSString(我从UITextView读取)中是否存在unicode字符。此外,如何将这些字符转换为其UCS-2十六进制等价物


例如繁 = 7E41,体 = 4F53,中 = 4E2D,文 = 6587要仅检查ascii字符(或您选择的其他编码),请使用:

[我的字符串可以转换为编码:NSASCIIStringEncoding]

如果字符串包含非ascii字符,它将返回NO。然后,可以使用以下命令将字符串转换为UCS-2数据:

[myString dataUsingEncoding:NSUTF16BigEndianStringEncoding]

或NSUTF16LittleEndiAstringencoding,具体取决于您的平台。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",
这些都不起作用。 他们似乎在工作,就好像我记录了字符串它看起来没问题

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,而您还没有删除


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

@Jeremy Bower,如果我调用[atext canBeConvertedToEncoding:nsUnicoding];无论我键入的是unicode字符(泰语字母)还是拉丁语字母,它总是返回yes。@Ilker Baltaci:这是因为字符可以转换为unicode。Unicode是ASCII的超集,包含泰国字符。
instructionsArrayString: (
    "Great Guildford St/SouthwarkSt \U00a0Stop:\U00a0 BM",
    "Walk to SE1 0HL"
)