首页 > 解决方案 > C++ setlocale() 返回“NULL”

问题描述

我尝试在基于我安装alpine:3.8的docker 容器中运行我的程序。locale我可以正确获得语言环境结果,但在我的程序中,我使用setlocale()函数来读取和转换一些 unicode,但得到了NULL结果。奇怪的是该程序在本地服务器(CentOS)中运行良好。

我通过这个在 alpine 安装了语言环境

https://github.com/rilian-la-te/musl-locales 

效果很好,我得到了正确的 locale/locale -a /locale -m 结果。

代码如下:

fprintf(stderr, "setlocale: \"%s\"\n", setlocale(LC_CTYPE, "zh_CN.UTF-8"));                       
setlocale(LC_ALL, "zh_CN.UTF-8"); 

我期望的输出zh_CN.UTF-8

标签: dockersetlocale

解决方案


用于locale -a检查系统上可用的语言环境。您应该只在系统上使用受支持的 UTF-8 语言环境。我假设在这种情况下,您可能需要将“zh_CN.UTF-8”更改为“C.UTF-8”以获得更好的可移植性(“C.UTF-8”是符合 POSIX 标准的默认语言环境)。


推荐阅读