setlocale()的参数,“zh_CN.UTF-8“, “chs“, “chinese-simplified“的差异。
在 C/C++ 中,setlocale()
函数的参数 zh_CN.UTF-8
、chs
和 chinese-simplified
均用于设置中文简体环境,但它们的语义、平台支持和编码行为存在显著差异:
1. zh_CN.UTF-8
(推荐)
- 含义:
zh_CN
: 中文(中华人民共和国,简体中文)。UTF-8
: 明确指定字符编码为 Unicode UTF-8。
- 平台支持:
- 所有现代操作系统(Linux/macOS/Windows 均原生支持)。
- 编码特性:
- 完全支持 Unicode 字符(包括中文、emoji、生僻字)。
- 与 POSIX 标准和现代编程实践兼容。
- 示例代码:
setlocale(LC_ALL, "zh_CN.UTF-8"); std::wcout << L"你好,世界!UTF-8 编码" << std::endl;
2. chs
(Windows 专用)
- 含义:
- 老式标识符,等价于
zh_CN.GBK
(GBK 编码)。 - 专为 Windows 设计,非 POSIX 标准。
- 老式标识符,等价于
- 平台支持:
- Windows:原生支持,但 GBK 编码无法表示 Unicode 扩展字符(如
𠀃
)。 - Linux/macOS:可能不被识别,需手动映射或安装旧语言包。
- Windows:原生支持,但 GBK 编码无法表示 Unicode 扩展字符(如
- 编码特性:
- 限制性强,仅支持 GBK 字符集(约 20,974 个汉字)。
- 与现代 UTF-8 编程模式不兼容。
- 示例代码:
setlocale(LC_ALL, "chs"); std::wcout << L"你好,世界!GBK 编码" << std::endl;
3. chinese-simplified
(非标准,部分平台支持)
- 含义:
- 描述性标识符,意图表示中文简体。
- 非 POSIX 标准,依赖具体平台的实现。
- 平台支持:
- Windows:部分旧版本可能支持,但推荐使用
zh_CN
或chs
。 - Linux/macOS:需通过
localedef
自定义或映射到zh_CN
。
- Windows:部分旧版本可能支持,但推荐使用
- 编码特性:
- 可能强制使用 UTF-8 或 GBK,具体行为不确定。
- 示例代码:
setlocale(LC_ALL, "chinese-simplified"); std::wcout << L"你好,世界!不确定编码" << std::endl;
4. 关键差异对比表
参数 | 语义 | 编码 | 平台兼容性 | 适用场景 |
---|---|---|---|---|
zh_CN.UTF-8 | 标准化中文简体(UTF-8) | UTF-8 | 所有现代平台 | 跨平台项目、Unicode 兼容 |
chs | Windows 专用中文简体(GBK) | GBK | Windows 为主 | 旧 Windows 项目或 GBK 限制场景 |
chinese-simplified | 描述性中文简体(非标准) | 不确定 | 有限平台支持 | 实验性代码或遗留系统依赖 |
5. 实际开发建议
-
优先使用
zh_CN.UTF-8
:- 跨平台兼容性:确保程序在 Linux/macOS/Windows 上统一使用 UTF-8 编码。
- 编码完整性:支持所有 Unicode 字符,避免生僻字丢失。
-
Windows 传统项目保留
chs
:- 仅用于必须兼容旧 Windows API 或 GBK 字符集的场景。
-
避免使用
chinese-simplified
:- 标准化程度低,可能导致不可预知的行为(如编码错误或 Locale 无法加载)。
6. 设置失败时的处理
#include <locale.h>
#include <iostream>int main() {// 尝试设置标准化 UTF-8 环境if (!setlocale(LC_ALL, "zh_CN.UTF-8")) {// 回退到 Windows 兼容模式if (!setlocale(LC_ALL, "chs")) {// 最终回退到 C 语言环境(ASCII)setlocale(LC_ALL, "");}}std::wcout << L"Hello, Locale!" << std::endl;return 0;
}
总结
- **
zh_CN.UTF-8
** 是现代编程的首选,确保编码统一和跨平台兼容。 - **
chs
** 仅用于遗留 Windows 项目,需注意 GBK 编码的限制。 - **
chinese-simplified
** 不推荐使用,优先级低于前两者。
说明
以上内容来自腾讯元宝。
相关文章:
setlocale()的参数,“zh_CN.UTF-8“, “chs“, “chinese-simplified“的差异。
在 C/C 中,setlocale() 函数的参数 zh_CN.UTF-8、chs 和 chinese-simplified 均用于设置中文简体环境,但它们的语义、平台支持和编码行为存在显著差异: 1. zh_CN.UTF-8(推荐) 含义: zh_CN: 中文&…...

docker 安装达梦数据库(离线)
docker安装达梦数据库,官网上已经下载不了docker版本的了,下面可通过百度网盘下载 通过网盘分享的文件:dm8_20240715_x86_rh6_rq_single.tar.zip 链接: https://pan.baidu.com/s/1_ejcs_bRLZpICf69mPdK2w?pwdszj9 提取码: szj9 上传到服务…...
FastGPT 引申:如何基于 LLM 判断知识库的好坏
文章目录 如何基于 LLM 判断知识库的好坏方法概述示例 Prompt声明抽取器 Prompt声明检查器 Prompt 判断机制总结 下面介绍如何基于 LLM 判断知识库的好坏,并展示了如何利用声明抽取器和声明检查器这两个 prompt 构建评价体系。 如何基于 LLM 判断知识库的好坏 在知…...

关于2023新版PyCharm的使用
考虑到大家AI编程的需要,建议大家安装新版Python解释器和新版PyCharm,下载地址都可以官网进行: Python:Download Python | Python.org(可以根据需要自行选择,建议选择3.11,保持交流版本一致&am…...
Leetcode 112: 路径总和
Leetcode 112: 路径总和 问题描述: 给定一个二叉树的根节点 root 和一个目标和 targetSum,判断是否存在从根节点到叶子节点的路径,使路径上所有节点的值相加等于目标和 targetSum。 适合面试的解法:递归 解法特点: …...

华为云IAM 用户名和IAM ID
账号 当您首次使用华为云时注册的账号,该账号是您的华为云资源归属、资源使用计费的主体,对其所拥有的资源及云服务具有完全的访问权限,可以重置用户密码、分配用户权限等。账号统一接收所有IAM用户进行资源操作时产生的费用账单。 账号不能…...

Compose Multiplatform+Kotlin Multiplatfrom 第四弹跨平台
文章目录 引言功能效果开发准备依赖使用gradle依赖库MVIFlow设计富文本显示 总结 引言 Compose Multiplatformkotlin Multiplatfrom 今天已经到compose v1.7.3,从界面UI框架上实战开发看,很多api都去掉实验性注解,表示稳定使用了!…...

【Proteus仿真】【STM32单片机】全自动养护智能生态雨林缸
文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器,使用按键、LCD1602液晶、DS18B20模块、PCF8591 ADC、浑浊传感器、PH传感器、液位传感器、继电器、水泵、酸碱调节剂、加热降温装置等。 主要功能&am…...
GBT32960 协议编解码器的设计与实现
GBT32960 协议编解码器的设计与实现 引言 在车联网领域,GBT32960 是一个重要的国家标准协议,用于新能源汽车与监控平台之间的数据交互。本文将详细介绍如何使用 Rust 实现一个高效可靠的 GBT32960 协议编解码器。 整体架构 编解码器的核心由三个主要组…...
SolidWorks 转 PDF3D 技术详解
在现代工程设计与制造流程中,不同软件间的数据交互与格式转换至关重要。将 SolidWorks 模型转换为 PDF3D 格式,能有效解决模型展示、数据共享以及跨平台协作等问题。本文将深入探讨 SolidWorks 转 PDF3D 的技术原理、操作流程及相关注意事项,…...

OpenMCU(二):GD32E23xx FreeRTOS移植
概述 本文主要描述了GD32E230移植FreeRTOS的简要步骤。移植描述过程中,忽略了Keil软件的部分使用技巧。默认读者熟练使用Keil软件。本文的描述是基于OpenMCU_FreeRTOS这个工程,该工程已经下载放好了移植GD32E230 FreeRTOS的所有文件 OpenMCU_FreeRTOS工程…...
Codeforces Round 835 (Div. 4)题解ABCDEFG
Problem - A - Codeforces 题意:你有 t 组数据,每组有两两不同的三个数 a,b,c,现在需要你求出他们的中位数。 思路:模拟即可 // Code Start Here int t;cin >> t;while(t--){vector<int> a(3);for(int i 0;i<3…...

NO1.C++语言基础|四种智能指针|内存分配情况|指针传擦和引用传参|const和static|c和c++的区别
1. 说⼀下你理解的 C 中的四种智能指针 智能指针的作用是管理指针,可以避免内存泄漏的发生。 智能指针就是一个类,当超出了类的作用域时,就会调用析构函数,这时就会自动释放资源。 所以智能指针作用的原理就是在函数结束时自动释…...
SQLite Having 子句详解
SQLite Having 子句详解 引言 SQLite 是一款轻量级的数据库管理系统,广泛应用于移动设备、嵌入式系统和各种桌面应用程序。在 SQL 查询中,HAVING 子句是用于过滤结果集的关键部分,尤其是在使用 GROUP BY 子句进行分组操作时。本文将详细解析 SQLite 中的 HAVING 子句,包括…...
Python数据分析面试题及参考答案
目录 处理 DataFrame 中多列缺失值的 5 种方法 批量替换指定列中的异常值为中位数 使用正则表达式清洗电话号码格式 合并两个存在部分重叠列的 DataFrame 将非结构化 JSON 日志转换为结构化表格 处理日期列中的多种非标准格式(如 "2023 年 12 月 / 05 日") 识…...

Spring Boot 3 整合 MinIO 实现分布式文件存储
引言 文件存储已成为一个做任何应用都不可回避的需求。传统的单机文件存储方案在面对大规模数据和高并发访问时往往力不从心,而分布式文件存储系统则提供了更好的解决方案。本篇文章我将基于Spring Boot 3 为大家讲解如何基于MinIO来实现分布式文件存储。 分布式存…...

ubuntu20 安装python2
1. 确保启用了 Universe 仓库 在某些情况下,python2-minimal 包可能位于 Universe 仓库中。你可以通过以下命令启用 Universe 仓库并更新软件包列表: bash复制 sudo add-apt-repository universe sudo apt update 然后尝试安装: bash复制…...
2025.3.3总结
周一这天,我约了绩效教练,主要想了解专业类绩效的考核方式以及想知道如何拿到一个更好的绩效。其他的岗位并不是很清楚,但是专业类的岗位,目前采取绝对考核,管理层和专家岗采取相对考核,有末尾淘汰。 通过…...

多线程-JUC源码
简介 JUC的核心是AQS,大部分锁都是基于AQS扩展出来的,这里先结合可重入锁和AQS,做一个讲解,其它的锁的实现方式也几乎类似 ReentrantLock和AQS AQS的基本结构 AQS,AbstractQueuedSynchronizer,抽象队列…...

ICLR 2025|香港浸会大学可信机器学习和推理课题组专场
点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! AITIME 01 ICLR 2025预讲会团队专场 AITIME 02 专场信息 01 Noisy Test-Time Adaptation in Vision-Language Models 讲者:曹晨涛,HKBU TMLR Group一年级博士生,目前关注基础…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
关于uniapp展示PDF的解决方案
在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项: 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库: npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

Axure 下拉框联动
实现选省、选完省之后选对应省份下的市区...
【深尚想】TPS54618CQRTERQ1汽车级同步降压转换器电源芯片全面解析
1. 元器件定义与技术特点 TPS54618CQRTERQ1 是德州仪器(TI)推出的一款 汽车级同步降压转换器(DC-DC开关稳压器),属于高性能电源管理芯片。核心特性包括: 输入电压范围:2.95V–6V,输…...
6.计算机网络核心知识点精要手册
计算机网络核心知识点精要手册 1.协议基础篇 网络协议三要素 语法:数据与控制信息的结构或格式,如同语言中的语法规则语义:控制信息的具体含义和响应方式,规定通信双方"说什么"同步:事件执行的顺序与时序…...
Electron简介(附电子书学习资料)
一、什么是Electron? Electron 是一个由 GitHub 开发的 开源框架,允许开发者使用 Web技术(HTML、CSS、JavaScript) 构建跨平台的桌面应用程序(Windows、macOS、Linux)。它将 Chromium浏览器内核 和 Node.j…...