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: 中文&…...
Python项目-基于Django的在线教育平台开发
1. 项目概述 在线教育平台已成为现代教育的重要组成部分,特别是在后疫情时代,远程学习的需求显著增加。本文将详细介绍如何使用Python的Django框架开发一个功能完善的在线教育平台,包括系统设计、核心功能实现以及部署上线等关键环节。 本项…...
【2025】Electron + React 架构筑基——从零到一的跨平台开发
引言 源代码仓库: Github仓库【electron_git】 你是否厌倦了在命令行中反复输入git status,却依然无法直观看到文件变化? 是否羡慕VS Code的丝滑Git集成,却苦恼于无法定制自己的专属工具? 本专栏将为你打开一扇新的…...
Vue3实战学习(IDEA中打开、启动与搭建Vue3工程极简脚手架教程(2025超详细教程)、Windows系统命令行启动Vue3工程)(2)
目录 一、命令行中重新启动已搭建好的Vue3工程。(快速上手) (0)Windows环境下使用命令行从零到一手动搭建Vue3工程教程。 (1)首先找到已建Vue3工程的目录。 (2)无需再下载依赖包,直接执行npm ru…...
【ArcGIS】地理坐标系
文章目录 一、坐标系理论体系深度解析1.1 地球形态的数学表达演进史1.1.1 地球曲率的认知变化1.1.2 参考椭球体参数对比表 1.2 地理坐标系的三维密码1.2.1 经纬度的本质1.2.2 大地基准面(Datum)的奥秘 1.3 投影坐标系:平面世界的诞生1.3.1 投…...
Redis- 切片集群
切片集群 切片集群什么是Redis Cluster吗?为什么需要切片集群?Redis Cluster的数据分片机制是怎样的?哈希槽的算法是什么基本算法流程 待填坑 切片集群 什么是Redis Cluster吗?为什么需要切片集群? Redis Cluster是R…...
Oxidized收集H3C交换机网络配置报错,not matching configured prompt (?-mix:^(<CD>)$)
背景:问题如上标题,H3C所有交换机配置的model都是comware 解决方案: 1、找到compare.rb [rootoxidized model]# pwd /usr/local/lib/ruby/gems/3.1.0/gems/oxidized-0.29.1/lib/oxidized/model [rootoxidized model]# ll comware.rb -rw-r--…...
力扣146 - LRU缓存
视频讲解 哈希 双向链表 为什么要用双向链表? 快速删除节点(O(1)) 如果是单链表的话,删除一个节点时,需要从头遍历,找到前驱节点,才能修改 prev->next,导致 O(n)…...
单例模式:确保一个类只有一个实例
目录 引言 1. 单例模式的核心思想 2. 单例模式的实现方式 2.1 饿汉式单例 2.2 懒汉式单例 2.3 线程安全的懒汉式单例 2.4 双重检查锁定(Double-Checked Locking) 2.5 静态内部类实现单例 2.6 枚举实现单例 3. 单例模式的使用场景 4. 单例模式…...
doris: SQL Server
Doris JDBC Catalog 支持通过标准 JDBC 接口连接 SQL Server 数据库。本文档介绍如何配置 SQL Server 数据库连接。 使用须知 要连接到 SQL Server 数据库,您需要 SQL Server 2012 或更高版本,或 Azure SQL 数据库。 SQL Server 数据库的 JDBC 驱动…...
【ubuntu20】--- 搭建 gerrit 最新最详细
在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。 【ubuntu20】--- 搭建 gerrit 最新最详细…...
RtlLookupAtomInAtomTable函数分析之RtlpAtomMapAtomToHandleEntry函数的作用是验证其正确性
第一部分: NTSTATUS RtlLookupAtomInAtomTable( IN PVOID AtomTableHandle, IN PWSTR AtomName, OUT PRTL_ATOM Atom OPTIONAL ) { NTSTATUS Status; PRTL_ATOM_TABLE p (PRTL_ATOM_TABLE)AtomTableHandle; PRTL_ATOM_TABLE_ENTRY a; …...
Python----数据分析(Matplotlib五:pyplot的其他函数,Figure的其他函数, GridSpec)
一、pyplot的其他函数 1.1、xlabel 在matplotlib中, plt.xlabel() 函数用于为当前活动的坐标轴(Axes)设置x轴的 标签。当你想要标识x轴代表的数据或单位时,这个函数非常有用。 plt.xlabel(xlabel text) 1.2、ylabel 在matplotl…...
C语言——链表
大神文献:https://blog.csdn.net/weixin_73588765/article/details/128356985 目录 一、链表概念 1. 什么是链表? 1.1 链表的构成 2. 链表和数组的区别 数组的特点: 链表的特点: 二者对比: 二…...
使用免费IP数据库离线查询IP归属地
一、准备工作 1.下载免费IP数据库 首先,访问 MaxMind官网(https://www.maxmind.com/en/home)如果你还没有MaxMind账号,可以通过此链接地址(https://www.maxmind.com/en/geolite2/signup)进行账号注册&…...
MySQL(单表)知识点
文章目录 1.数据库的概念2.下载并配置MySQL2.1初始化MySQL的数据2.2注册MYSQL服务2.3启动MYSQL服务2.4修改账户默认密码2.5登录MYSQL2.6卸载MYSQL 3.MYSQL数据模型3.1连接数据库 4.SQL简介4.1SQL的通用语法4.2SQL语句的分类4.3DDL语句4.3.1数据库4.3.2表(创建,查询,修改,删除)4…...
1.15-16-17-18迭代器与生成器,函数,数据结构,模块
目录 15,Python3 迭代器与生成器15-1 迭代器15-1-1 基础知识15-1-2 迭代器与for循环工作原理 15-2 生成器(本质就是迭代器)15-2-1 yield 表达式15-2-2 三元表达式15-2-3 列表生成式15-2-4 其他生成器(——没有元祖生成式——&…...
window下的docker内使用gpu
Windows 上使用 Docker GPU需要进行一系列的配置和步骤。这是因为 Docker 在 Windows 上的运行环境与 Linux 有所不同,需要借助 WSL 2(Windows Subsystem for Linux 2)和 NVIDIA Container Toolkit 来实现 GPU 的支持。以下是详细的流程: 一、环境准备 1.系统要求 Window…...
CVE-2025-0392:JeeWMS graphReportController.do接口SQL注入漏洞复现
文章目录 CVE-2025-0392:JeeWMS graphReportController.do接口SQL注入漏洞复现0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.构造POC2.复现CVE-2025-0392:JeeWMS graphReportController.do接口SQL注入漏洞复现 0x01 前言 免责声明:请勿利用文章内的相…...
DR和BDR的选举规则
在 OSPF(开放最短路径优先)协议中,DR(Designated Router,指定路由器) 和 BDR(Backup Designated Router,备份指定路由器) 的选举是为了在广播型网络(如以太网…...
Java 大视界 -- Java 大数据在智能家居能源管理与节能优化中的应用(120)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
第七课:Python反爬攻防战:Headers/IP代理与验证码
在爬虫开发过程中,反爬虫机制成为了我们必须面对的挑战。本文将深入探讨Python爬虫中常见的反爬机制,并详细解析如何通过随机User-Agent生成、代理IP池搭建以及验证码识别来应对这些反爬策略。文章将包含完整的示例代码,帮助读者更好地理解和…...
MySql的安装及数据库的基本操作命令
1.MySQL的安装 1.1进入MySQL官方网站 1.2点击下载 1.3下拉选择MySQL社区版 1.4选择你需要下载的版本及其安装的系统和下载方式 直接安装以及压缩包 建议选择8.4.4LST LST表明此版本为长期支持版 新手建议选择红框勾选的安装方式 1.5 安装包下载完毕之后点击安装 2.数据库…...
VsCode导入时选择相对路径
自动导入时总是以db://开头了,而我们通常需要的是相对路径,对VsCode进行如下设置: 打开 VSCode 设置: 使用快捷键 Ctrl ,(Windows/Linux)或 Cmd ,(Mac)。 或者在菜单栏中选择 …...
计算机视觉|3D卷积网络VoxelNet:点云检测的革新力量
一、引言 在科技快速发展的背景下,3D 目标检测技术在自动驾驶和机器人领域中具有重要作用。 在自动驾驶领域,车辆需实时、准确感知周围环境中的目标物体,如行人、车辆、交通标志和障碍物等。只有精确检测这些目标的位置、姿态和类别&#x…...
创新监管,保障生产安全
在现代工业生产中,电气焊作业是不可或缺的一环,但同时也伴随着一定的安全风险。为了提高焊接作业的安全性,迪格特电子科技有限公司开发了电气焊安全作业管理平台,该平台通过智能化监管系统,实现了对焊机联网的全面监管…...
深入解析 C# 中的泛型:概念、用法与最佳实践
C# 中的 泛型(Generics) 是一种强大的编程特性,允许开发者在不预先指定具体数据类型的情况下编写代码。通过泛型,C# 能够让我们编写更灵活、可重用、类型安全且性能优良的代码。泛型广泛应用于类、方法、接口、委托、集合等多个方…...
AI数字人源码开发---SaaS化源码部署+PC+小程序一体化
#数字人#数字人分身#123数字人#数字人分身源码部署搭建 AI数字人源码开发步骤 确定功能需求:首先确定需要实现的功能和特性,包括语音识别、自然语言处理、人脸识别等功能。这些功能将构成AI数字人的核心功能。 开发AI数字人源码:使用合适的…...
Mysql-经典故障案例(1)-主从同步由于主键问题引发的故障
故障报错 Could not execute Write_rows event on table test.users; Duplicate entry 3 for key PRIMARY, Error_code: 1062; handler error HA_ERR_FOUND_DUPP_KEY; the events master log mysql-bin.000031, end_log_pos 329 这是由于从库存在与主库相同主键值,…...
ElasticSearch 分词器介绍及测试:Standard(标准分词器)、English(英文分词器)、Chinese(中文分词器)、IK(IK 分词器)
ElasticSearch 分词器介绍及测试:Standard(标准分词器)、English(英文分词器)、Chinese(中文分词器)、IK(IK 分词器) ElasticSearch 分词器介绍及测试1. Standard Analyz…...
