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一年级博士生,目前关注基础…...
[笔记] 系统分析师 目录
文章目录系统分析师 第一章 绪论系统分析师 第二章 经济管理与应用数学系统分析师 第三章 操作系统基本原理系统分析师 第四章 数据通信与计算机网络系统分析师 第五章 数据库系统系统分析师 第六章 系统配置与性能评价系统分析师 第七章 企业信息化系统分析师 第八章 软件工程…...
避开HAL库:STM32F103寄存器级PWM移相全桥配置避坑指南
STM32F103寄存器级PWM移相全桥实战:从原理到避坑指南 在嵌入式开发领域,许多工程师习惯使用HAL库或标准库进行STM32开发,这确实能提高开发效率。但当项目对时序精度、资源占用或性能有极致要求时,直接操作寄存器往往能带来更优的效…...
对比直接使用厂商 API 观察 Taotoken 在用量与成本可视化方面的优势
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比直接使用厂商 API 观察 Taotoken 在用量与成本可视化方面的优势 效果展示类,从个人开发者视角出发,分享…...
Treelink选择工具:基于树形结构与链接关系的智能对象筛选方案
1. 项目概述:为什么我们需要“简化模拟选择”?在仿真分析、游戏开发、影视特效乃至工业设计领域,“模拟选择”是一个高频且令人头疼的操作。无论是为3D场景中的一片森林批量设置风力参数,还是在电路仿真中挑选特定节点进行信号分析…...
【亲测免费】 普冉PY32F002A移植FreeRTOS资源文件
普冉PY32F002A移植FreeRTOS资源文件 【下载地址】普冉PY32F002A移植FreeRTOS资源文件 本资源文件提供了将FreeRTOS V9.0移植到普冉M0芯片PY32F002A的完整示例。开发环境基于KEIL,并使用了LL库进行移植。该示例展示了如何在PY32F002A芯片上运行四个任务,并…...
北京房山区浇筑阁楼测评:天顺诚达工艺佳但价格略高,适合这类
为了避免违反规则,以下内容去除了联系方式等违规信息。随着对居住空间利用需求的增加,在北京房山区浇筑阁楼成为不少人的选择。本次测评旨在为对北京房山区浇筑阁楼服务感兴趣的人群,客观呈现相关服务的情况。参与本次测评的是北京天顺诚达建…...
告别元器件搜索焦虑:立创EDA专业版+立创商城联动使用技巧全解析
告别元器件搜索焦虑:立创EDA专业版立创商城联动使用技巧全解析 在电子设计领域,元器件选型与供应链管理一直是工程师面临的核心挑战之一。当项目进入关键阶段,一个看似简单的0.1uF电容缺货或封装不匹配,就可能引发连锁反应&#x…...
如何在 5 分钟内集成 human-panic:为你的 Rust CLI 应用添加专业级错误处理
如何在 5 分钟内集成 human-panic:为你的 Rust CLI 应用添加专业级错误处理 【免费下载链接】human-panic Panic messages for humans. 项目地址: https://gitcode.com/gh_mirrors/hu/human-panic human-panic 是一个专为 Rust CLI 应用设计的错误处理库&…...
Armv9内存拷贝指令优化与性能调优
1. Arm架构内存拷贝指令深度解析在Armv9架构中,内存拷贝操作通过FEAT_MOPS(Memory Operations)特性得到显著增强。这套指令集专为高效内存操作设计,其中CPYFP/CPYFM/CPYFE系列指令实现了分阶段的内存拷贝机制。与传统的循环拷贝相比,这种设计…...
攻防演练:Ettercap 实战中间人攻击与防御指南
1. 认识Ettercap:网络攻防的双刃剑 第一次接触Ettercap是在2015年的一次企业内网渗透测试中。当时我们需要模拟黑客攻击路径,测试公司内部网络的安全性。这个看起来其貌不扬的命令行工具,只用了几条简单的ARP欺骗命令,就成功劫持了…...
