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,来确定合适的编码环境。

setLocale的一个用处的更多相关文章

  1. classmethod一个用处是创建可选类构造器

    Definition and Introduction通常来说, descriptor 是一种绑定着特殊行为属性的对象, 在访问它时行为被descriptor协议定义的方法所重载.这些方法是__get ...

  2. Android实训案例(七)——四大组件之中的一个Service初步了解,实现通话录音功能,抽调接口

    Service Service的奇妙之处.在于他不须要界面,一切的操作都在后台操作,所以非常多全局性(手机助手,语音助手)之类的应用非常长须要这个.我们今天也来玩玩 我们新建一个project--Se ...

  3. #pragma详解

    在#Pragma是预处理指令它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#pragma指令对每个编译器给出了一个方法,在保持与C和C ++语言完全兼容的情况下,给出主机或操作系统专有 ...

  4. #pragma详细解释(一)

    #pragma详细解释 #pragma详细解释(一) 2010-04-18 14:21:00|  分类: 默认分类 |  标签: |字号大中小订阅     在#Pragma是预处理指令它的作用是设定编 ...

  5. #pragma命令详解

    每种C和C++的实现支持对其宿主机或操作系统唯一的功能.例如,一些程序需要精确控制超出数据所在的储存空间,或着控制特定函数接受参数的方式.#pragma指示使每个编译程序在保留C和C++语言的整体兼容 ...

  6. iOS 多线程之GCD的使用

    在iOS开发中,遇到耗时操作,我们经常用到多线程技术.Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法,只需定义想要执行的任务,然后添加到适当的调度队列 ...

  7. [每日Linux]Linux下xsell和xftp的使用

    实验缘由: 1.xsell在Linux下的作用就是远程登录的一个界面,也就是实现访问在Windows下访问Linux服务器的功能.之前在数据挖掘实验中因为自己电脑的内存不够,曾经使用过实验室的服务器跑 ...

  8. python语言中的编码问题(续)

    上文提到了python开发中非常重要的两处设置. 一个是编解码器的默认设置defaultencoding >>> import sys >>> sys.getdef ...

  9. 深入理解javascript函数参数与闭包(一)

    在看此文章,希望先阅读关于函数基础内容 函数定义与函数作用域 的章节,因为这篇文章或多或少会涉及函数基础的内容,而基础内容,我放在函数定义函数作用域 章节. 本文直接赘述函数参数与闭包,若涉及相关知识 ...

随机推荐

  1. 4.net两种交互模式

    .net两种交互模式 (1) C/S:客户端(Client)/服务器模式(Server) (2) B/S:浏览器(Browser)/服务器模式(Server)   来自为知笔记(Wiz)

  2. EFCodeFirst 各种命令整理

    1.Enable-Migrations (创建迁移目录:Migrations,如果有多个数据上下文可以用 -ContextTypeName  命令迁移对应的数据上下文 ) 2.Add-Migratio ...

  3. Git for Android Studio 学习笔记

    http://learngitbranching.js.org/ 一个特别好的git学习教程 创建一个project,然后导入github

  4. swagger快速开发

    转载:https://blog.csdn.net/xxoo00xx00/article/details/77163399 swagger 学习笔记 搭建环境: 1,jdk1.8 2,idea 3,sp ...

  5. Python 动态加载 Extension Manager Classes

    看着看着发现了一个库:stevedore(http://stevedore.readthedocs.org/en/latest/managers.html),但是感觉文档做得不行啊,都没个tutori ...

  6. Java中Date()类 日期转字符串、字符串转日期的问题(已解决)

    Java中Date()类 日期转字符串.字符串转日期的问题 今天在写东西的时候突然发现一个问题,就是先new 一个Date()然后将生成的值转为字符串, 然后再将转换后的字符串再次用new Date( ...

  7. 二维数组针对某字段排序 - array_multisort()

    /** * 针对二维数组下的某字段排序 * @param array $myarr 被排序数组 * @param string $sort_key 排序根据字段 * @param flag $sort ...

  8. Stage4--Python面向对象

    说在前面: Stage1-Stage4简单介绍一下Python语法,Stage5开始用python实现一些实际应用,语法的东西到处可以查看到,学习一门程序语言的最终目的是应用,而不是学习语法,语法本事 ...

  9. SharePoint 2013 - Upgrade

    1. 升级到SP2013时,需要对data connection文件(UDCX文件)进行修改: 1. Mark all UDCX File (Ctrl + A) and open them. 2. F ...

  10. Shader Example

    //测试viewDir对顶点的影响Shader "Example/TestViewDir" { Properties{ _RimColor("Rim Color" ...