我使用http://ioannis.mpsounds.net/2007/12/19/sqlite-native-unicode-like-support/的解决方案为我的POS App for the iPhone,并且工作得很好。
然而,正如评论中所说:
例如,sqlite_unicode.c第1861行包含大于0xffff的整数常量,但声明为unsigned short。我想知道我应该如何应对。
我正在修复项目中的所有警告,这是最后一个。代码是这样的:
static unsigned short unicode_unacc_data198[] = { 0x8B8A, 0x8D08, 0x8F38, 0x9072, 0x9199, 0x9276, 0x967C, 0x96E3, 0x9756, 0x97DB, 0x97FF, 0x980B, 0x983B, 0x9B12, 0x9F9C, 0x2284A, 0x22844, 0x233D5, 0x3B9D, 0x4018, 0x4039, 0x25249, 0x25CD0, 0x27ED3, 0x9F43, 0x9F8E, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF };
我不知道这个十六进制的东西,那该怎么办?我没有得到错误,不知道这是否会导致将来...
答案 0 :(得分:1)
是的,0x2284A确实大于0xFFFF,这是16位无符号整数可以包含的最大值。(*)
这是一个查找表,用于将带有变音符号的字符映射到基本的非重音字符。出于某种原因,定义了一些映射,指向符合16位的Unicode字符的“基本多语言平面”之外的字符。
U + 2284A和上面的其他是非常模糊的扩展汉字。我不确定为什么BMP中的一个角色会将这样一个角色称为其基本的非重音版本。也许这是用于生成表格的源数据中的错误,或者它可能只是中文书写系统的另一个奇怪的怪癖。无论哪种方式,你都不太可能需要这种映射。因此,只需将此数组中的所有五位十六进制代码更改为0xFFFF(这似乎是代码用于表示“无映射”的内容)。
(*:理论上,short
可能超过16位,但实际上它不会是。如果它看起来像这个代码完全会掉下来,因为它是自由混合带有short
指针的u16
。)