Unicode字符集与多字节字符集

Unicode字符集与多字节字符集当一个软件打开一个文本时 它要做的第一件事是决定这个文本究竟是使用哪种字符集 ANSI 还是 UNICODE 的哪种编码 ANSI 每个国家都可能不同 UNICODE 分为 UTF 8 UTF 16 UTF 32 保存的 二者的差距别人已总结的很明白了 我就不在复制一遍了 Unicode 字符集与多字节字符集 Unicode 字符集和多字节字符集关系 推荐看这一个 先看的前一个 把我头看晕了 多字节字符集与 Unicode 字符集其中有 wchar t 与 char 类型间的转换 CString 的使用以下内容参考 c 入门经

当一个软件打开一个文本时,它要做的第一件事是决定这个文本究竟是使用哪种字符集(ANSI还是UNICODE)的哪种编码(ANSI每个国家都可能不同,UNICODE分为UTF-8,UTF-16,UTF-32)保存的。

1.表示字符: P16

字符集演变:ASCII码(7bit表示)–ASCII(8bit表示,变体称为Latin-1)–其他各国专用字符集–通用字符集(UCS,32bit表示)

2.使用字符变量 P50

wchar_t wch(L'h'); 

也可使用十六进制表示法创建

 wchar_t wch1(L'\x0438'); //Cyrillic(西里尔语) N 

3.国际字符串

wstring包含wchar_t类型的字符串,wchar_t是c++内置的宽字符类型
u16string对象,该对象包含16位Unicode字符串,其类型是char16_t
u32string对象,该对象包含32位Unicode字符串,其类型是char32_t
stiing头文件定义了所有这些类型,后两个类型比存储wchar_t字符的字符串类型更有用。
注:
理论上,可以使用string把字符串存储为UTF-8字符。定义UTF-8字符串时在普通字符串字面量的前面加上u8,但是string类型把字符存储为char类型,且对unicode编码一无所知。UTF-8编码使用1-4字节编码每个字符,操作字符串的对象的函数无法识别它。例如,如果字符串包含需要两个或三个字节表示的字符,length()就会返回错误的长度










初始化字符串时时应加上对应的前缀(L,u,U),所有字符串类型可使用的函数同string。

wstring类型的问题是给wchar_t类型应用的字符编码是由实现方式定义(各个国家的多字节编码不同)的,所以随编译器的不同而不同,如果需要使用支持多个国家的字符集,最好使用u16string和u32string。

原字符串字面量:所有字面都都不需要在使用转义符\来进行转义,这种用法对于正则表达式来说可读性很高。
通过加上前缀 R”(后缀)”
(书上说可通过加前缀 “*( 与后缀 )*”,可通过RU使char32_t指定为原字符串字面量,我反正这样使用编译器报错)




 string str = R"(FSD""\\FSD)"; cout << str << endl; 

4.windows下的字符转换

void CharChange(std::string &strInfo) { 
    int nwLen = MultiByteToWideChar(CP_UTF8, 0, strInfo.c_str(), -1, NULL, 0); wchar_t * pwBuf = new wchar_t[nwLen + 1]; memset(pwBuf, 0, (nwLen + 1) * sizeof(wchar_t)); MultiByteToWideChar(CP_UTF8, 0, strInfo.c_str(), strInfo.length(), pwBuf, nwLen); int nLen = WideCharToMultiByte(CP_ACP, 0, pwBuf, -1, NULL, NULL, NULL, NULL); char * pBuf = new char[nLen + 1]; memset(pBuf, 0, nLen + 1); // 多字节的编码 WideCharToMultiByte(CP_ACP, 0, pwBuf, nwLen, pBuf, nLen, NULL, NULL); strInfo = pBuf; delete[]pBuf; delete[]pwBuf; pBuf = NULL; pwBuf = NULL; } 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/221908.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午5:00
下一篇 2026年3月17日 下午5:01


相关推荐

  • JavaScript节流 防抖

    JavaScript节流 防抖说明 此文章仅供参考和学习使用 转载请注明出处 1 防抖 阻止一个函数在很短的时间间隔内连续调用 只有在上一次函数调用执行后达到规定的时间间隔 才能进行下一次调用 但要保证一个一个累计最小调用的时间 相当于将若干函数的调用 合并为在某个固定的时间间隔内的一次函数的调用 只要不是最后一次触发 就不异步执行请求 应用场景 函数节流一般用于 onresize onscroll 等短时间内会多

    2026年3月26日
    2
  • html设置内容居中,设置div内容居中

    html设置内容居中,设置div内容居中接下来要准备的是准备一个 div 用来放内容了 这里为了显示特意给 div 设置了边框 接下来就在 div 中添加内容 如下图所示 运行后会发现内容偏向于左上角 给 div 设置水平居中 如下图所示 如何设置 div 里面的字居中显示先说文字居中 此处是垂直居中 关键代码 height 105px line height 105px 两个值要相等 居中文字横向居中 关键代码 text align centerju

    2026年3月18日
    3
  • linux 时间戳转换/dmesg 时间转换

    linux 时间戳转换/dmesg 时间转换dmesg时间转换dmesg输出的格式不易查看,可以通过命令进行转换。记录如下:时间查看:date-d”1970-01-01UTC`echo”$(date+%s)-$(cat/proc/uptime|cut-f1-d”)+12288812.926194″|bc`seconds”/proc/uptime详解在Linux中

    2022年10月2日
    4
  • 百度推团购导航已失良机,团购搜索正成主流趋势

    百度推团购导航已失良机,团购搜索正成主流趋势

    2021年8月12日
    55
  • 高德地图——标记「建议收藏」

    高德地图——标记「建议收藏」高德地图——标记

    2022年5月22日
    65
  • nginx和apache、lvs区别

    nginx和apache、lvs区别对比项apachenginx简介配置简洁。负载均衡服务器,支持7层负载均衡内存及资源占用多轻量级,同样的web服务占用少稳定性超稳定不稳定,bug多进程同步进程模型异步进程模型(抗并发)处理静态文件性能好(3倍以上)性能差对PHP支持简单需要配合其他后端用rewrite功能性能好(rewrite频繁时用apache)性能差结合机制后端apache集群前端nginx抗并发Nginx轻量级,采…

    2022年6月14日
    30

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号