我是靠谱客的博主 酷炫睫毛膏,最近开发中收集的这篇文章主要介绍C++ 输出Unicode字符的正确方法正确输出 Unicode 字符,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

正确输出 Unicode 字符

要输出特殊符号首先需要知道它的 Unicode 编码,当然,直接在剪切板里 copy 对应符号也是可以的。

要查询字符对应的 Unicode 编码,可以在如下网站:https://unicode-table.com/cn/

以恒等符号 ≡ 为例,我们查询它的 Unicode编码为:u2261

Linux下:

#include <iostream>
using namespace std;
int main (){
cout << "≡ is the same as u2261" << endl;
string s("≡ is the same as u2261");
cout << s << endl;
}

程序输出如下:

≡ is the same as ≡
≡ is the same as ≡

我们可能会好奇,≡ 究竟占多少个字节?如果知道它占了多少个字节,我们就能很方便的对这个符号进行存取:

(1)首先用一种简单的办法:

string s("u2261");
cout << s.size() << endl;

程序输出如下:

3

如此,我们可以很方便的存取它:

//string s("u2261");
char* c = new char[3];
copy(s.begin(), s.begin()+3, c);
cout << c << endl;

程序将输出:

(2)如果知道 unicode 编码对应的字节数,就不必如此做了:

注:表格来自于博客 https://www.cnblogs.com/zizifn/p/4716712.html

Bits of

code point

First

code point

Last

code point

Bytes in

sequence

Byte 1

Byte 2

Byte 3

Byte 4

Byte 5

Byte 6

  7

U+0000

U+007F

1

0xxxxxxx

  

  

  

  

  

11

U+0080

U+07FF

2

110xxxxx

10xxxxxx

  

  

  

  

16

U+0800

U+FFFF

3

1110xxxx

10xxxxxx

10xxxxxx

  

  

  

21

U+10000

U+1FFFFF

4

11110xxx

10xxxxxx

10xxxxxx

10xxxxxx

  

  

26

U+200000

U+3FFFFFF

5

111110xx

10xxxxxx

10xxxxxx

10xxxxxx

10xxxxxx

  

31

U+4000000

U+7FFFFFFF

6

1111110x

10xxxxxx

10xxxxxx

10xxxxxx

10xxxxxx

10xxxxxx

通过查表我们得知 u2206 在范围 u0800 - uFFFF 之间,这个编码范围对应的字节数是:3。

windows下:

#include <stdio.h>
#include <windows.h>
int main (){
SetConsoleOutputCP(65001);
printf("≡n");
}

程序将输出:

函数 SetConsoleOutputCP 用于设置控制台程序输出代码页,代码页是字符集编码的别名。

只介绍两种常用的代码页编号:

  • 936        简体中文
  • 65001   UTF-8

如果想打印其他语种,可以在网上查询一下代码页表,选取需要的字符集编码。

如此,便可以正确打印出特殊字符了。

当然,也可以也可以通过文件流将特殊字符在文件里存取,需要注意:

  • 保存文档编码为UTF-8(取自己所需要的编码方案)
  • 该特殊字符所占用的字节空间

结语

当我们通过某些数据类型存取特殊字符,而发现输出乱码的时候,排除控制台代码页和文档编码的因素,往往是分配的地址空间不足以容纳该特殊字符导致的。知道特殊字符的对应编码,并知悉它所占用的字节空间,大部分情况下便可有效避免乱码。

 

 

 

最后

以上就是酷炫睫毛膏为你收集整理的C++ 输出Unicode字符的正确方法正确输出 Unicode 字符的全部内容,希望文章能够帮你解决C++ 输出Unicode字符的正确方法正确输出 Unicode 字符所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部