msk*_*skw 5 c c++ unicode localization ios
在iOS中,如果我使用vswprintf非西方语言环境,它将失败并返回-1.
但是,如果我正确设置了语言环境,它将正确写入.
为什么是这样?有任何想法吗?
奇怪的是vswprintf,iOS上的实现将它给出的宽字符串参数转换为窄字符串,然后将结果转换回宽字符串(我不得不调试此问题一次).如果您的宽字符串中包含非ASCII字符,那么这是一个有损转换,只能成功转换某些字符.
可以转换的确切非ASCII字符集取决于当前的语言环境设置.如果您尝试传入不受支持的字符,则vswprintf返回-1并设置errno为错误EILSEQ(非法多字节序列)将失败.
至少在Mac OS X上,您可以通过切换到UTF-8语言环境来解决这个问题,例如:
setlocale(LC_CTYPE, "UTF-8")
Run Code Online (Sandbox Code Playgroud)
但是,这似乎不适用于iOS,所以如果您需要能够vswprintf提前知道所有角色而不知道区域设置,我担心除非您重新实现vswprintf自己,否则运气不好.
| 归档时间: |
|
| 查看次数: |
441 次 |
| 最近记录: |