std::setlocale详解

2024-01-04 05:28
文章标签 详解 std setlocale

本文主要是介绍std::setlocale详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

头文件

#include <clocale>

作用

std::setlocale是C++标准库中的一个函数,用于设置当前程序的本地化(locale)环境。

setlocale 函数安装指定的系统本地环境或其一部分,作为新的 C 本地环境。

修改保持效果,并影响所有关乎本地环境的 C 库函数执行,到下次调用 setlocale 为止。

原型

原型如下:

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

category参数

category:指定要设置的本地化环境的类别,包括以下值:

LC_ALL:所有本地化设置
LC_COLLATE:字符串比较和排序规则
LC_CTYPE:字符分类和转换规则
LC_MONETARY:货币格式
LC_NUMERIC:数值格式
LC_TIME:日期和时间格式

locale参数

locale:指定要设置的本地化环境的名称或字符串。有以下几种输入格式:

“C”

将本地化环境设置为默认的C语言环境。

在程序启动时,将执行以下语句的等效项:

setlocale( LC_ALL, "C" );    //运行库调用,无需用户手动调用

NULL

获取当前的本地化环境设置。

示例:

char* pLocale = setlocale(LC_ALL, nullptr);

结果:

1

因为在程序启动时,将执行以下语句的等效项:setlocale( LC_ALL, “C” );

因此程序运行后再获取到的本地化环境配置是“C”。

“”

将区域设置设定为默认值,该值是从操作系统获得的用户默认的 ANSI 代码页。 区域设置名称设置为由 GetUserDefaultLocaleName 返回的值。 代码页设置为由 GetACP 返回的值。

示例:

//获取本地化环境配置
char* pLocal = setlocale(LC_ALL, nullptr);//恢复默认配置//获取语言环境名称
TCHAR tchLocaleName[MAX_PATH];
int nRet = GetUserDefaultLocaleName(tchLocaleName, MAX_PATH);//获取代码页
int nAcp = GetACP();//获取语言配置,同GetUserDefaultLocaleName
WCHAR wchLang[MAX_PATH];
int nLen = GetLocaleInfoEx(tchLocaleName, LOCALE_SLANGUAGE, wchLang, MAX_PATH);//获取国家/地区
WCHAR wchCountry[MAX_PATH];
int nLen2 = GetLocaleInfoEx(tchLocaleName, LOCALE_SCOUNTRY, wchCountry, MAX_PATH);char* pDefault = setlocale(LC_ALL, "");char* pNewLC = setlocale(LC_ALL, nullptr);

结果:

2

language语言字符串可选:

语言字符串 | Microsoft Learn

country国家/地区字符串可选:

国家-地区字符串 | Microsoft Learn

codepage代码页字符串可选:

代码页标识符 - Win32 apps | Microsoft Learn

其他参数值的验证方式同前,因此后面不再赘述。

“.OCP”

将设置区域设置为从操作系统获得的当前 OEM 代码页。 区域设置名称设置为由 GetUserDefaultLocaleName 返回的值。 代码页设置为由 GetLocaleInfoEx 返回的用户默认区域设置名称的 LOCALE_IDEFAULTCODEPAGE 值。

示例:

//".OCP"
char* pOCP = setlocale(LC_ALL, ".OCP");

结果:

3

“.ACP”

将区域设置设定为从操作系统获得的 ANSI 代码页。 区域设置名称设置为由 GetUserDefaultLocaleName 返回的值。 代码页设置为由 GetLocaleInfoEx 返回的用户默认区域设置名称的 LOCALE_IDEFAULTANSICODEPAGE 值。

示例:

//".ACP"
char* pACP = setlocale(LC_ALL, ".ACP");

结果:
4

localename

将区域设置设定为由 localename指示的区域设置名称。 代码页设置为由 GetLocaleInfoEx 返回的指定区域设置名称的 LOCALE_IDEFAULTANSICODEPAGE 值。

示例:

//"localename"
char* pLocaleName = setlocale(LC_ALL, "zh-HK");
//查看设置后的效果
char* pNewLC = setlocale(LC_ALL, nullptr);

结果:
5

localename语言环境字符串参考该链接中的附录 A:产品行为,参阅其中表内的“语言标记”列:

[MS-LCID]: Appendix A: Product Behavior | Microsoft Learn

“language”

将区域设置设定为由 指示的语言,为指定的语言使用默认国家/地区,为从主机操作系统获取的国家/地区使用用户默认的 ANSI 代码页。

示例:

//"language"
//以下几种设置方式是等效的
char* pLocaleName = setlocale(LC_ALL, "en-US");
char* pLocaleName2 = setlocale(LC_ALL, "English");
char* pLocaleName3 = setlocale(LC_ALL, "English_United States.1252");
//查看设置后的效果
char* pNewLC = setlocale(LC_ALL, nullptr);r);

结果:
6

language语言字符串可选值:

语言字符串 | Microsoft Learn

“language_country”

将区域设置设定为由 和 指示的语言和国家/地区,以及从主机操作系统获得的默认代码页。 代码页设置为由 GetLocaleInfoEx 返回的指定区域设置名称的 LOCALE_IDEFAULTANSICODEPAGE 值。

示例:

//"language-country"
char* pLocale = setlocale(LC_ALL, "chinese-traditional_hong-kong");//国家/地区字符串可缩写
char* pLocale2 = setlocale(LC_ALL, "chinese-traditional_HKG");char* pLocale3 = setlocale(LC_ALL, "chinese-simplified_china");//设置的语言和指定国家/地区的默认语言不一致时,会国家/地区的默认语言为准
//hong-kong默认语言为繁体(Codepage 950),这里即时设置语言为chinese-simplified,设置后也还是默认的繁体语言
char* pLocale4 = setlocale(LC_ALL, "chinese-simplified_hong-kong");char* pLocale5 = setlocale(LC_ALL, "chinese-traditional_china");
//查看设置后的效果
char* pNewLC = setlocale(LC_ALL, nullptr);

结果:
7

language语言字符串可选:

语言字符串 | Microsoft Learn

country国家/地区字符串可选:

国家-地区字符串 | Microsoft Learn

“language_country.code-page”

将区域设置设定为由 、 和 <code_page> 字符串指示的语言、国家/地区和代码页。 你可以使用语言、国家/地区和代码页的各种组合。

例如,此调用会将区域设置设定为“法语(加拿大)”并使用代码页 1252:

setlocale( LC_ALL, "French_Canada.1252" );

示例:

//"language_country.code-page"
char* pLocale = setlocale(LC_ALL, "chinese-traditional_hong-kong.950");char* pLocale3 = setlocale(LC_ALL, "chinese-simplified_china.936");char* pLocale4 = setlocale(LC_ALL, "english-us_america.1252");

结果:
8

输入配置有冲突时,主要注意以下两种情况:

①语言和国家/地区默认语言冲突:以国家/地区默认语言为准

②语言和代码页冲突时:最终设置的语言同①,代码页则以设置的为准

示例:

//输入配置有冲突时
//语言和代码页冲突
char* pLocale5 = setlocale(LC_ALL, "chinese-traditional_hong-kong.936");char* pLocale6 = setlocale(LC_ALL, "chinese-simplified_hong-kong.936");char* pLocale7 = setlocale(LC_ALL, "chinese-simplified_china.950");char* pLocale8 = setlocale(LC_ALL, "chinese-traditional_china.950");

结果:
9

language语言字符串可选:

语言字符串 | Microsoft Learn

country国家/地区字符串可选:

国家-地区字符串 | Microsoft Learn

代码页标识符可选值:

代码页标识符 - Win32 apps | Microsoft Learn

“.code-page”

将代码页设置为由 <code_page> 指示的值,以及指定代码页的默认国家/地区和语言(由主机操作系统定义)。

示例:

//".code-page"
//GB2312
char* pLocale = setlocale(LC_ALL, ".936");//BIG5
char* pLocale2 = setlocale(LC_ALL, ".950");//UTF-8
char* pLocale3 = setlocale(LC_ALL, ".65001");//UTF-16
char* pLocale4 = setlocale(LC_ALL, ".1200");
//big endian 字节顺序
char* pLocale5 = setlocale(LC_ALL, ".1201");//UTF-32
//little endian 字节顺序
char* pLocale6 = setlocale(LC_ALL, ".12000");
// big endian 字节顺序;
char* pLocale7 = setlocale(LC_ALL, ".12001");//ANSI
char* pLocale8 = setlocale(LC_ALL, ".1252");

结果:
10

代码页标识符可选值:

代码页标识符 - Win32 apps | Microsoft Learn

返回值

函数返回值为指向字符串的指针,表示当前设置的本地化环境。

操作系统不支持所请求的本地化环境或缺少相关的本地化环境设置,则返回NULL。

注意

程序启动过程中,运行任何用户代码前会执行 std::setlocale(LC_ALL, “C”); 的等价代码。

尽管返回类型为 char* ,修改被指向的字符是未定义行为。

附录

相关参考:

setlocale,_wsetlocale | Microsoft Learn

区域设置名称、语言和国家-地区字符串 | Microsoft Learn

[MS-LCID]: Appendix A: Product Behavior | Microsoft Learn

语言字符串 | Microsoft Learn

国家-地区字符串 | Microsoft Learn

代码页标识符 - Win32 apps | Microsoft Learn

这篇关于std::setlocale详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/568291

相关文章

SQL BETWEEN 语句的基本用法详解

《SQLBETWEEN语句的基本用法详解》SQLBETWEEN语句是一个用于在SQL查询中指定查询条件的重要工具,它允许用户指定一个范围,用于筛选符合特定条件的记录,本文将详细介绍BETWEEN语... 目录概述BETWEEN 语句的基本用法BETWEEN 语句的示例示例 1:查询年龄在 20 到 30 岁

CSS place-items: center解析与用法详解

《CSSplace-items:center解析与用法详解》place-items:center;是一个强大的CSS简写属性,用于同时控制网格(Grid)和弹性盒(Flexbox)... place-items: center; 是一个强大的 css 简写属性,用于同时控制 网格(Grid) 和 弹性盒(F

spring中的ImportSelector接口示例详解

《spring中的ImportSelector接口示例详解》Spring的ImportSelector接口用于动态选择配置类,实现条件化和模块化配置,关键方法selectImports根据注解信息返回... 目录一、核心作用二、关键方法三、扩展功能四、使用示例五、工作原理六、应用场景七、自定义实现Impor

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

一文详解如何在idea中快速搭建一个Spring Boot项目

《一文详解如何在idea中快速搭建一个SpringBoot项目》IntelliJIDEA作为Java开发者的‌首选IDE‌,深度集成SpringBoot支持,可一键生成项目骨架、智能配置依赖,这篇文... 目录前言1、创建项目名称2、勾选需要的依赖3、在setting中检查maven4、编写数据源5、开启热

Python常用命令提示符使用方法详解

《Python常用命令提示符使用方法详解》在学习python的过程中,我们需要用到命令提示符(CMD)进行环境的配置,:本文主要介绍Python常用命令提示符使用方法的相关资料,文中通过代码介绍的... 目录一、python环境基础命令【Windows】1、检查Python是否安装2、 查看Python的安

HTML5 搜索框Search Box详解

《HTML5搜索框SearchBox详解》HTML5的搜索框是一个强大的工具,能够有效提升用户体验,通过结合自动补全功能和适当的样式,可以创建出既美观又实用的搜索界面,这篇文章给大家介绍HTML5... html5 搜索框(Search Box)详解搜索框是一个用于输入查询内容的控件,通常用于网站或应用程

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五