当前位置: 首页 > article >正文

Linux(CentOS/CTyunOS)缺少GBK、GB2312中文字符集

        在CTyunOS上部署新项目,运行到正则匹配的地方报错

terminate called after throwing an instance of 'boost::wrapexcept<boost::xpressive::regex_error>' what(): invalid named back-reference

#正则表达式没有正确被加载,导致进行正则匹配时正则表达式的格式错误

        排查发现并不是程序从配置文件中读取数据时发生错误,而是在程序内部调用mbstowcs()函数时,由于缺失字符集发生错误

mbstowcs()

C 标准库(<cstdlib><stdlib.h>)的一部分。具体来说,它用于将多字节字符串(通常是 UTF-8 编码)转换为宽字符字符串(wchar_t 类型)

         程序中是要将 "abcd\123\234\345\456" 这种从配置文件中读取到的包含中文字符的GBK编码的多字节字符串转化成宽字符字符串(其中每两个\为一个中文字符),但是由于系统没有GBK字符集,导致 setlocale(LC_ALL, "GBK") 设置字符集失败,程序也无法识别这种带 '\' 的GBK多字节字符串。这就造成 mbstowcs() 遇到 '\' 时出错,但是这个错误又不会有中断和告警,只是单纯的遇到 '\' 直接停止,不会继续转化后面的所有字符,也就是说我们最终获取到的字符串只有 "abcd"。这页是正则匹配时报错的原因:正则表达式有很严谨的括号规则, mbstowcs() 中断会造成前后括号不匹配,无法分析正则表达式。

解决办法:安装指定字符集

        1、使用 locale -a 查看当前系统已有字符集,里面肯定没有你想要的字符集

        2、查看 /usr/share/locale 目录下有没有你想要的字符集,存在的字符集代表该系统支持此字符集,这里是zh_CN.GBK

        3、查看 /usr/share/i18n/locales/ 目录下是否有 zh_CN(定义 zh_CN 语言的配置文件)

              以及/usr/share/i18n/charmaps/ 目录下是否有 GBK.gz(定义 GBK 字符集的映射文件)

              如果以上文件均存在,代表系统已经安装了此字符集 

              如果不存在,则yum install glibc-common、glibc-locale-source、glibc-langpack-zh

              安装后再次检查可以发现上述两项均已存在

        4、sudo localedef -i zh_CN -f GBK zh_CN.GBK 生成字符集配置

        5、再次locale -a 可以看到已经成功添加 zh_CN.GBK 字符集

        6、再次运行程序,可以看到 mbstowcs() 函数已经能正常将多字节GBK字符串转化成boost库所需的宽字符字符串,正则匹配能够正常进行


http://www.kler.cn/a/506916.html

相关文章:

  • Web第一次作业
  • ubuntu20.04安装MySQL5.7
  • c#-Halcon入门教程——标定
  • 如何有效防止和解决IP劫持问题
  • 【C语言】_字符串追加/连接函数strcat
  • C++单例模式的设计
  • 【设计模式-结构型】代理模式
  • RK3568笔记七十四:AP配网实现
  • VLAN是什么?有什么作用?
  • 高效构建与部署Python Web应用:FastAPI的测试与持续集成
  • 基于单片机的智能输液系统
  • C#中委托和函数类的关系
  • 11-2.Android 项目结构 - themes.xml 文件基础解读
  • 微信小程序web-view 外链白屏, 分享后白屏?
  • 解决关于Xcode16提交审核报错
  • 11-3.Android 项目结构 - 认识 .idea 目录
  • 如何在QT中保证线程是安全的?
  • 多包单仓库(monorepo)实现形式
  • 代码随想录算法【Day22】
  • 零基础入门uniapp Vue3组合式API版本
  • uniApp开通uniPush1.0个推,SpringBoot集成uniPush1.0个推
  • SDL2:PC端编译使用
  • dockerfile1.0
  • 【使用EasyExcel快速实现数据下载到Excel功能】
  • Vue进阶之Vue3后台系统
  • 【C#】WPF项目,项目目录文件解析、WinForms 和 WPF 的概念及其区别与联系