1

我被触发了这个问题,因为我在这个答案的 NSString 上使用了一个类别方法来计算特定字符的出现次数:

https://stackoverflow.com/a/15947190/472599

这个方法非常快,通过使用特殊的 CFString 方法来枚举字符串的内容。它需要一个 UniChar 作为参数。为了获得 UniChar,我使用了:

unichar semicolon = [@";" characterAtIndex: 0];

因为我在 NSString 中找不到任何给我 UniChar 的东西。

编译器不会抱怨这一点(通过 unichar 代替 UniChar

类型的定义是:

// in MacTypes.h
typedef UInt16                          UniChar;
// and:
typedef unsigned short                  UInt16;

// in NSString.h:
typedef unsigned short                  unichar;

所以这些类型现在似乎是相同的(iOS 7.1)。但我们能期望这种情况永远如此吗?看到 NSInteger 在移动到 64 位时从 int 变为 long,我想确定..

4

2 回答 2

2

澄清一下:“UniChar”和“unichar”都不是Unicode 字符。它们是 UTF-16 组件。就像单字节是 UTF-8 组件一样,UniChar 和 unichar 是 UTF-16 组件。单个 Unicode 字符由一到四个 UTF-8 组件或一到两个 UTF-16 组件组成。

对于 ASCII 字符,你可以写

unichar semicolon = ';';
于 2014-03-17T13:39:37.383 回答
1

他们是一样的吗?是的。他们会永远一样吗?谁知道呢。让它们不同会破坏很多代码,这是肯定的。

于 2014-03-17T13:28:09.210 回答