gpt4 book ai didi

ios - iOS 中的 iswalpha() 在 iOS 上返回的值与在 MacOS 上返回的值不同

转载 作者:行者123 更新时间:2023-11-29 11:05:22 24 4
gpt4 key购买 nike

我对 iOS 上的 iswalpha() 有疑问。

我正在 Xcode 4.5 中调整我的应用程序,我试图将西类牙字符 ú 传递给 iswalpha()。 xcode 显示 ú 的 int 值为 250。

当我尝试在真实设备上运行该应用程序时,iswalpha() 返回 0;但在模拟器中(我在装有 10.8.2 的 MacBook air 上运行 Xcode)它返回 1。

我猜原因可能是 iOS 的宽字符实现与 MacOS 不同。解决此问题的最佳方法是什么?

增强的细节:西类牙字符 ú 的 UTF-16(unicode) 编码在 int 值中为 250。我认为 iswalpha() 应该像 MACOS 一样返回 1,而不是在 iOS 中返回 0。

大妈新用户不能在这里张贴图片。所以ú的UTF-16编码请引用: http://www.fileformat.info/info/unicode/char/fa/index.htm

最佳答案

好吧,我现在可以回答我自己的问题,还有一个开发日志,以防我以后忘记:

看来是Apple在iOS中实现libc的错误。考虑到非英语语言的字母,iswalpha() 的实现是不完整的。 iswalpha() 无法识别不同语言中的特定字母(ú,á,ó,...),因为它们超出了 0x7F ASCII 边界,不知何故无法被 iOS 的语言环境处理函数识别,但显然在不同的语言环境中,它们仍然应该是可读的字母。

关于它的一些细节:

iOS 中的 iswalph() 被追踪到:

__DARWIN_CTYPE_static_inline int
__istype(__darwin_ct_rune_t _c, unsigned long _f)
{
#ifdef USE_ASCII
return !!(__maskrune(_c, _f));
#else /* USE_ASCII */
return (isascii(_c) ? !!(_DefaultRuneLocale.__runetype[_c] & _f)
: !!__maskrune(_c, _f));
#endif /* USE_ASCII */
}

最后返回 0 的是 __maskrune(_c, _f))。

Apple 忽略了这一点是可以理解的,因为没有人会在 Objective-C 中使用 iswalpha()。但是,对于某些移植项目,注意这一点可能仍然有用。这是一个广泛使用的功能,因此对于许多移植到 iOS 的遗留项目来说可能很重要。希望 Apple 可以在以后的版本中修复它。

我现在解决这个问题的方法是使用 iswalpha() 的包装函数,它通过我自己的代码处理这些拉丁字母。现在该应用程序在我的 iPhone 中完美运行!

关于ios - iOS 中的 iswalpha() 在 iOS 上返回的值与在 MacOS 上返回的值不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13889982/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com