C++国际化编程


字节和字符的区别

  • 字节(octet)是一个八位的存储单元,取值范围一定是0~255。而字符(character,或者word)为语言意义上的符号,范围就不一定了。例如在UCS-2中定义的字符范围为0~65535,它的一个字符占用两个字节。

Big Endian和Little Endian

字符0xabcd如果存储为 AB CD,则称为Big Endian;如果存储为 CD AB,则称为Little Endian。

字符集和编码关系

  • 一个字符集,它规定了每个字符对应的唯一字符码,却没有规定这个字符码在计算机中怎样存储。例如,汉字“一”,它的 Unicode 字符码为\u4e00,转换成二进制就是 100 1110 0000 0000 。可以看到,它有 15 位二进制数,至少需要两个字节来存储。
  • 于是UTF-32 编码 制定了标准,一个字符就用四个字节来表示。这样编码和解码都方便,固定取 32 位二进制就行了。

编码标准和字符集

  • 首先要注意:宽窄字符与UTF16,UTF8不是对应的关系
  • 多字节:有的编码方式采用 1~n 个字节存储,是变长的,例如UTF-8、GB2312、GBK 等;如果一个字符使用了这种编码方式,就将它称为多字节字符,或者窄字符。
  • 宽字节:有的编码方式是固定长度的,不管字符编号大小,始终采用 n 个字节存储,例如 UTF-32、UTF-16等;如果一个字符使用了这种编码方式,就将它称为宽字符。

Unicode字符集

  • Unicoide 的全称是 Universal Multiple-Octet Coded Character Set(通用多八位字符集,简称 UCS)。
  • Unicode是为整合全世界的所有语言文字而诞生的。任何文字在Unicode中都对应一个值,这个值称为代码点(code point)。代码点的值通常写成 U+ABCD 的格式。而文字和代码点之间的对应关系就是UCS-2(Universal Character Set coded in 2 octets)。顾名思义,UCS-2是用两个字节来表示代码点,其取值范围为 U+0000~U+FFFF。为了能表示更多的文字,人们又提出了UCS-4,即用四个字节表示代码点。它的范围为 U+00000000~U+7FFFFFFF,其中 U+00000000~U+0000FFFF和UCS-2是一样的。要注意,UCS-2和UCS-4只规定了代码点和文字之间的对应关系,并没有规定代码点在计算机中如何存储。规定存储方式的称为UTF(Unicode Transformation Format),其中应用较多的就是UTF-16和UTF-8了。
  • UTF-8、UTF-16、UTF-32都是字符编码,不是字符集。

ANSI标准

  • ANSI并不是某一种特定的字符编码,而是在不同的系统中,ANSI表示不同的编码。电脑卖给美国国内的系统默认就用ASCII编码,卖给中国人的系统默认就用GBK编码,卖给韩国人的系统默认就用EUC-KR编码,…但是为了避免误会系统功能有差异,就统一把默认编码都显示成ANSI。

编码

GB码

  • GBK、GB2321既是字符集,又是字符编码。GBK是GB2312的超集。

GB2312

  • GB2312对任意一个图形字符都采用两个字节表示,并对所收汉字进行了“分区”处理,每区含有 94
    个汉字/符号,分别对应第一字节和第二字节。

GBK

  • GBK的中文编码是双字节来表示的,英文编码是用ASCII码表示的,即用单字节表示。但GBK编码表中也有英文字符的双字节表示形式,所以英文字母可以有2种GBK表示方式。为区分中文,将其最高位都定成1。英文单字节最高位都为0。当用GBK解码时,若高字节最高位为0,则用ASCII码表解码;若高字节最高位为1,则用GBK编码表解码。

UTF码

UTF-8

  • UTF-8将0x0080以下字符编为1字节,0x0080-07FF字符编为2字节,0x0800以上字符编为3字节,代理对(surrogate pair)编为4字节。
  • ASCII字符是单个字节的,比如“A”的ASCII是65。而Unicode是双字节的,比如“A”的Unicode是0065,C语言使用‘\0’作为字符串结尾,这样一来,C语言的字符串函数将无法正常处理Unicode。在UTF-8里,英文字符仍然跟ASCII编码一样,因此原先的函数库可以继续使用。

UTF-16

  • UTF-16是完全对应于UCS-2的, 它将每个字符编码为两个字节,但2字节不足以表示某些语言的所有字符,于是UTF-16支持使用代理,可以使用4字节表示一个字符。UTF-16包括三种:UTF-16,UTF-16BE(Big Endian),UTF-16LE(Little Endian)。

UTF-32

  • UTF-32是完全对应于UCS-4的,它将所有字符都编码为4字节。

Unicode编程

ANSI字符 转 Unicode字符

//VS2019中的字符集选择Unicode字符集
//Windoes下ANIS转Unicode	ASIN一般是GB2312,GB18030,GBK等编码,Unicode一般是ucs-2或UTF-16
wchar_t* CharToWchar(const char* str) {
	if (str == 0)
		return 0;
	wchar_t* m_wchar;
	int len = MultiByteToWideChar(CP_ACP, 0, str, -1, NULL, 0);
	m_wchar = new wchar_t[len + 1];
	MultiByteToWideChar(CP_ACP, 0, str, -1, m_wchar, len);
	m_wchar[len] = '\0';
	return m_wchar;
}
int main(int argc, char* argv[]) {
	ifstream in("1.txt");//1.txt内容是: 中国,编码是gb2312
	string line;	
	if (in.is_open()) {
		getline(in, line);
		wstring wline = CharToWchar(line.c_str());
		wcout.imbue(locale("zh_CN"));
		wcout << wline << endl;
		/*wchar_t* wline = CharToWchar(line.c_str());
		setlocale(LC_CTYPE, "");
		wprintf(L"%s\n", wline);
		setlocale(LC_CTYPE, "C");*/ //C语言
	}
	system("pause");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: C++ GUI编程是一种通过使用C++编程语言来设计和开发图形用户界面(GUI)的技术。Qt是一个跨平台的C++图形用户界面应用程序开发框架,它提供了丰富的函数库和组件,使开发者能够快速构建出现代化的GUI应用程序。Qt 4是Qt框架的第四个版本,它拥有许多强大的特性和功能。 使用Qt 4进行C++ GUI编程可以带来许多好处。首先,Qt 4提供了丰富的界面控件和布局管理器,使开发者能够轻松地设计和布置GUI界面。其次,Qt 4支持多平台开发,开发者可以使用相同的代码库在不同的操作系统上构建应用程序,如Windows、Mac和Linux等。 另外,Qt 4提供了强大的信号和槽机制,这是一种事件驱动的编程模型,通过信号和槽的连接,不同的组件之间可以实现相互的通信和交互。而且,Qt 4还提供了一套丰富的API,包括网络编程、数据库访问、图形绘制、国际化支持等功能,使开发者能够更加便捷地完成复杂的应用程序开发。 总的来说,C++ GUI编程是使用C++编程语言来开发图形用户界面的技术,而Qt 4是一个优秀的C++ GUI应用程序开发框架。使用Qt 4进行C++ GUI编程可以提供丰富的控件和功能,支持多平台开发,并且具有强大的信号和槽机制,大大简化了GUI应用程序的开发过程。 ### 回答2: C++ GUI Qt 4编程(英文版)是一个面向C++语言开发者的编程指南,主要介绍了使用Qt框架进行图形用户界面(GUI)应用程序开发的方法和技巧。 Qt是一个跨平台的C++应用程序开发框架,其最新版本为Qt 6,而Qt 4是一个较老但仍广泛使用的版本。Qt提供了一套丰富的工具和类库,使开发者能够以较低的工作量创建高质量的GUI应用程序。 C++ GUI Qt 4编程(英文版)详细介绍了Qt框架的各个方面,包括窗口、对话框、按钮、标签、文本框等常见GUI元素的创建和使用。同时,它还阐述了事件处理、布局管理、国际化、数据存储等高级主题。 这本书的优势之一是它使用了英文版,因此更适合那些通过英文文档来学习编程的读者。书中提供了大量实例代码和示意图,使读者能够更好地理解和应用所学内容。 通过学习C++ GUI Qt 4编程(英文版),读者将能够掌握Qt框架的核心概念和使用方法,能够开发出效果出色、功能完善的GUI应用程序。无论是新手还是有经验的开发者,都可以从这本书中获得宝贵的知识和经验。 总的来说,C++ GUI Qt 4编程(英文版)是一本详细介绍Qt框架的编程指南,适合想要学习并能够流畅阅读英文文档的C++开发者。它为读者提供了全面的知识和实例,帮助他们掌握Qt框架并开发出高质量的GUI应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值