docker - 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
解决方案
用于locale -a
检查系统上可用的语言环境。您应该只在系统上使用受支持的 UTF-8 语言环境。我假设在这种情况下,您可能需要将“zh_CN.UTF-8”更改为“C.UTF-8”以获得更好的可移植性(“C.UTF-8”是符合 POSIX 标准的默认语言环境)。
推荐阅读
- angular - 自 Angular 6.0 以来不推荐使用 Angular Header/Http/RequestOptions,如何将它们更新为 Angular 8.0?
- python - 如何使用 for 循环遍历字典列表、选择键并将值附加到新列表
- python - 如何创建一个空的蓝色图像?
- sapb1 - 如何使用 SAP B1 SDK 在日期字段中显示日期?
- javascript - Javascript参数忽略
- javascript - 为什么附加到引导导航栏时有 NaN 而不是变量?
- r - 在R中从下到上提取相似的值
- git - 有没有办法克隆特定 git 分支的标签?
- javascript - 绝对定位的 div 不滚动;当其他内容滚动时保持固定在屏幕上
- oracle - 我可以为 SqlPlus 中的值列表定义一个变量吗