1
18
我肯定会先得到一个char缓冲区,然后遍历它。
|
2
138
我认为人们理解如何处理unicode是很重要的,所以我最终写了一个非常可怕的答案,但是本着 tl;博士
还和我在一起?很好!
当前接受的答案似乎是字节与字符/字母混淆。当遇到unicode时,这是一个常见的问题,特别是在C背景下。Objective-C中的字符串表示为unicode字符(
编辑 :这不是全部的故事!令我非常遗憾的是,我完全忘了解释可组合字符,其中一个“字母”是由多个unicode代码点组成的。这为您提供了一种情况,您可以将一个“字母”解析为多个unichars,而每个unichars又是多个字节。哦,孩子。请参考 this great answer 关于这方面的细节。)
这个问题的正确答案取决于您是否要在
字符/字母
(与类型不同
正确的方法是使用
为了说明为什么保持事情的正确性很重要,我将展示以四种不同方式处理这个迭代的示例代码,两种错误,两种正确。这是代码:
运行此代码将输出以下内容(去掉NSLog cruft),显示字节和字母表示的确切差异(最后两个输出):
|
3
28
虽然Daniel的解决方案可能大部分时间都会奏效,但我认为解决方案取决于上下文。例如,我有一个拼写应用程序,当每个字符出现在屏幕上时,需要对其进行迭代,这可能与它在内存中的表示方式不一致。对于用户提供的文本尤其如此。
喂它一个像ma±ana这样的词可能会产生:
如果字符串是预合成的unicode格式,则会生成前者;如果字符串是分解的格式,则会生成后者。
Technical Q&A 1225
. 例如
我的解决方案是使用NSString的枚举子字符串sinrange传递NSStringEnumerationByComposedCharacterSequences作为枚举选项。重写前面的示例如下:
文件中关于 Characters and Grapheme Clusters 也可能有助于解释其中的一些问题。
|
4
25
看这个
Stack Overflow answer on How to remove whitespace from right end of
|
5
2
(在 __未使用的int i 位是关闭编译器警告所必需的。) |
6
1
尝试使用块枚举字符串
.h.小时
.m.公司
|
7
1
你不应该用
为了避免记忆问题。 |
8
1
|
Martin sku · 在目标C中打印时间 2 年前 |
Vinod prajapat · 如何更新数组的最后一个元素? 2 年前 |
subin272 · 修复iOS中的多个按钮单击事件? 6 年前 |
James Chan · 如何使用锁定/解锁? 6 年前 |
Josh F. · NSBundle mainBundle返回零 6 年前 |