博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
setLocale的一个用处
阅读量:5942 次
发布时间:2019-06-19

本文共 796 字,大约阅读时间需要 2 分钟。

setLocale是C库中的一个设置地域化信息的C函数。

函数原型为:

char *setlocale(int category, const char *locale)

参数解释:

  • category -- 这是一个已命名的常量,指定了受区域设置影响的函数类别。

    • LC_ALL 包括下面的所有选项。
    • LC_COLLATE 字符串比较。参见 strcoll()。
    • LC_CTYPE 字符分类和转换。例如 strtoupper()。
    • LC_MONETARY 货币格式,针对 localeconv()。
    • LC_NUMERIC 小数点分隔符,针对 localeconv()。
    • LC_TIME 日期和时间格式,针对 strftime()。
    • LC_MESSAGES 系统响应。
  • locale -- 如果locale是NULL 或空字符串"",则区域名称将根据环境变量值来设置,其名称与上述的类别名称相同。

最近项目中需要使用xdelta3进行二进制文件的增量更新,测试代码输入编码为GBK,printf输出的中文也显示正常,但xdelta3执行的结果就不尽如人意了。

如上图,上面printf输出的中文是正常的,下面xdelta输出的结果就是乱码的。

问一同事,说宽字符可以解决这个问题。测试显示正常,如下图。

经历过一番经历后,总算是解决了这个问题。

做技术的人总喜欢寻根问底,于是大胆猜测是不是setLocale函数起了作用。于是修改测试代码,宽字符改为普通字符,加上setLocale函数,再测,结果还是正常的。

测试代码如下图:

总结:

windows环境下,setLocale会改变字符的编码环境设置。有些应用程序依赖系统的编码环境,则需要添加setLocale,来确定合适的编码环境。

转载于:https://www.cnblogs.com/zhugaopeng/p/9801136.html

你可能感兴趣的文章
开发安全的 API 所需要核对的清单
查看>>
Mycat源码中的单例模式
查看>>
WPF Dispatcher介绍
查看>>
fiddler展示serverIP方法
查看>>
C语言中的随意跳转
查看>>
WPF中如何将ListViewItem双击事件绑定到Command
查看>>
《聚散两依依》
查看>>
小tips:你不知道的 npm init
查看>>
Mac笔记本中是用Idea开发工具在Java项目中调用python脚本遇到的环境变量问题解决...
查看>>
Jmeter也能IP欺骗!
查看>>
Rust 阴阳谜题,及纯基于代码的分析与化简
查看>>
ASP.NET Core的身份认证框架IdentityServer4(4)- 支持的规范
查看>>
(原創) array可以使用reference方式傳進function嗎? (C/C++)
查看>>
170多个Ionic Framework学习资源(转载)
查看>>
Azure:不能把同一个certificate同时用于Azure Management和RDP
查看>>
Directx11教程(15) D3D11管线(4)
查看>>
Microsoft Excel软件打开文件出现文件的格式与文件扩展名指定格式不一致?
查看>>
ios ble 参考
查看>>
linux中注册系统服务—service命令的原理通俗
查看>>
基于托管C++的增删改查及异步回调小程序
查看>>