从零开始,学习windows编程()字符编码以及国际化()cnyao

这里新的话题就是字符编码以及国际化的问题。在写完这个话题之后,我们就将开始"Win32 Application"的旅程。

既然你在看这篇文章,那我就假定你是一个开发者,并且对于ANSI,ASCII,Unicode,UTF8这些名词都有所了解,至少是听说过这些概念。因为这个例子中,我们就会使用到这些概念。如果你对于这些概念不熟悉,那请先从我的“参考”链接中找到对应的条目进行研究,然后再开始做这个例子。

OK,那我们就可以开始了。首先,打开你的Notepad,中文系统中叫做“记事本”。下面是一个空的打开的记事本:

我们来输入一些文字。

我们现在输入了一行中文,一行英文,并且带了一些标点符号,同时有一个换行符。

现在我们需要用一些其他的辅助工具,我这里用的是Notepad++以及它的一个叫HexEditor的插件,不喜欢使用的同学们可以用其他类似的工具代替,如WinHex或HexEdit等十六进制编辑器。用工具将这个txt文件打开,来看看这27个byte是怎么组成的。

打开文件后,点击工具栏上的“H”图标,我们来看看十六进制。

其实这里的对应是有些小问题的,对于中文的部分,dump出来的映射关系在移动光标的时候有些不准确,但是这个并不是影响很大,我们可以忽略。我们可以挑选其中几个来看看,这里的“你”对应的十六进制为“c4 e3”,也就是0xC4E3;"l"对应的十六进制为"6c",即0x6C。我们在这里看到的映射关系,就叫做字符编码(character encoding),而所有字符编码的集合,我们叫做字符集(character set--charset)。

我们在这里看到的是ANSI编码的,可以回过来看一下“保存”的那个截图,最下方的"encoding"选择的是"ANSI"。我们在保存文件的时候,还可以有其他选择。用saveas来另存一下。

可以看到,除了ANSI选项外,我们还有3个选项。

我们也将其用Notepad++打开,查看其十六进制。

当你有耐心看到这里,并且明白了我上面所写的内容的话,背景介绍完毕。下面就开始真正介绍“字符编码”了。

首先,上面我们所做的都是针对简体中文环境下的字符编码,至于其他编码,我们还没有涉及到,之后会谈到。对于“你”这个字符,在ANSI中,为0xC4E3;在Unicode中,为0x4F60。这是由不同的标准所决定的,决定前面的标准为中国国家标准,包括一系列一脉相承的标准,从GB2312到GBK到GB18030。决定后面的为The Unicode Standard。为什么会出现这么多标准,这是由历史原因以及当时的机器性能决定的。

历史

刚刚前面一直提到ANSI,其实并不是那么准确的,其中我们要涉及到codepage的概念,这里我们的codepage为936,也就是简体中文,在这个环境下,我们的ANSI编码表示才是中国国家标准的那套。ANSI真正的含义是“美国国家标准协会”(American National Standards Institute)。就是这个协会,定义了字符编码的“鼻祖”--ASCII码。现在的字符编码,大多是基于ASCII码扩展而来的。

ASCII(American Standard Code for Information Interchange, 美国信息交换标准代码)是一个7位(7-bits)码,包含了128个字符的定义(128=2^7),其中有33个非打印控制字符,以及95个可打印字符(包括空格),主要是用来显示英文字母的,其对应的ISO标准为ISO646。为了避免概念混淆,IANA(Internet Assigned Numbers Authority,互联网号码分配局)使用US-ASCII来称呼该字符集。至于为什么定义7位而不是一下子8位,当时是个“锱铢必较”的时代,内存太紧俏太贵了,能省一点是一点哈,够用就行。

尽管能表示英文字母,但是还是有很多字符还是无法表示,比如德文中的öäüß等,于是不够用了,然后就出现了扩展ASCII码(Extended ASCII),也就是将ASCII码从7位扩展成了8位,这样一共就有了256个字符。EASCII码比ASCII码扩充出来的符号包括表格符号、计算符号、希腊字母和特殊的拉丁符号。这里,就开始有了区分,对应的标准并不是一个,而是一系列的8位字符集标准,在ISO标准中叫做ISO 8859,全称为ISO/IEC 8859,现在定义了15个字符集(这里有16个,应该是希伯来语一个是视觉顺序,一个是逻辑顺序,为1个,猜想,未验证)。

上面的这些字符问题,基本解决了,下面就是比较麻烦的了。上面的字符,用1个byte都能够表示完整了,叫做SBCS(Single Byte Character Set)。但是咱们是象形文字啊,几千个字符,这小小256个地方怎么够用呢?于是没办法,扩1个byte吧,于是叫DBCS(Double Byte Character Set)。对于CJK语言(以中文、日文、韩文为主的东亚语言),基本上使用2个byte表示一个字符的编码方式来进行表示。具体了解的有日文、简体中文、韩文、繁体中文(至于泰文并不是很清楚,据有些同学说是3字节编码?资料没有找到很确切的,希望了解的同学指导一下)。

我们最熟悉的当然是简体中文了,所以就看这个,其余除了以前玩大宇游戏的时候,知道“大五码”(Big 5),用过南极星,就了解不深了。这里就不做介绍了。

GB 2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个字符。GB 2312的出现,基本满足了汉字的计算机处理需要,它所收录的汉字已经覆盖中国大陆99.75%的使用频率。

尽管覆盖了99.75%,但是还是有没覆盖的,所以之后又出现了GBK和GB-18030。这里对于编程人员的建议就是,如果需要更全的字符覆盖,就使用GB-18030,如果是嵌入式系统,需要在更小的内存中实现较多的功能,使用GB-2312即可,甚至在某些场合,可以使用其子集(一般嵌入式系统需要显示的字符是可以统计出来的,有些字符并不需要)。

这样,对于非Unicode部分的字符集,基本上要了解的都介绍了。不过,如何使用呢?我Latin-1的和GB 2312的,其同一个十六进制,对应的字符不一样、同样用“你”的编码来说,对应为0xC4E3,对应到Latin-1中,就是两个字符,Äã,两个是不能共存的。

在这种情况下,有一个新的概念出现了:

为了使用不同的字符集,我们使用不同的codepage。不同的codepage对应不同的字符集。对于简体中文,其codepage为936;日文的codepage为932;韩文的codepage为949;繁体中文的codepage为950。我们可以参考Windows下面的Region and Language Option设置,对于“非Unicode”语言设置,选择的就是特定的codepage。

THE END
0.从零开始教孩子学双语其三,因为这是个英文和中文一起学习,所以要从我们最基础开始做起,英文是从打招呼开始,那我们也从打招呼开始学中文。 在这个学习的中途,我们能够同时传授两门语言,孩子小的时候,就培养孩子双语的语感,那上学之后您还会为孩子英文发愁吗?为孩子中文发愁吗? jvzquC41yy}/lrfpuj{/exr1r191fli439:7dl
1.泰国生活除了我,还有一位来自湖南的姑娘是中国人,只是她从来不说中文,只说英语和泰语,人家就是来学语言的,所以拒绝说中文,怕影响了她的学习。ok,没问题,所以,我们不用中文对话。 哈哈,这才是学习语言应有的环境。 虽然我是从零开始学泰语,是基础最差的。而且是唯一一个不懂英语的学生,可我一样非常享受在这里的学习时jvzq<84yyy4489iqe0ipo8hqpvkov87712?2385817993:728a728:6273>20|mvon
2.泰语专业泰语专业:中泰友谊的使者 一、什么是泰语专业? 泰语专业属于文学门类中的外国语言文学类专业,本科生毕业后授予文学学士学位。学习泰语是从零开始的,即从字母开始学习。 泰语(ภาษาไทย),是泰国主体民族的语言,属于汉藏语系。全球有约6800万人口使用泰语。泰语是泰王国的官方语言,也分布在老挝、缅甸jvzquC41|uh/fuzhn0kew7hp1ktgq86378527@>0jvs
3.邻国泰语app安卓版下载邻国泰语手机版下载v1.2.0通过专业的听写模式、实时语音翻译以及丰富的词汇库,邻国泰语成为了用户学习泰语和进行语言交流的得力助手。 软件说明 1. 学习功能:邻国泰语内置了丰富的泰语学习材料,包括词汇、语法、听力、口语等多个方面,帮助用户从零开始系统学习泰语。 2. 翻译功能:支持中泰互译,用户可以通过输入文本、语音或拍照等方式进行翻译,jvzquC41o0isut~0eqs0uxkv19835@=0jvsm
4.成人高校能学泰语吗课程安排通常包括基础语法、日常会话、文化背景等。听起来好像简单,但实际学习中会发现泰语的发音规则和中文差异挺大。比如泰语有五个声调,光是发音就要花不少时间练习。不过不用担心,老师会带着从零开始教。 考试要求 入学考试一般考英语和语文,泰语本身不作为必考科目。但毕业时需要通过泰语水平测试,这部分可能需要额外准备 jvzquC41yy}/gxq0ep5ccxpcq1hlethl146379>3839957mvon
5.基础泰语1安卓版下载基础泰语1电子版免费下载:基础泰语1安卓版是一款专为初学者设计的泰语学习应用,旨在通过系统化的课程和互动练习,帮助用户从零开始掌握泰语基础知识,包括发音、词汇、句型及日常对话等,为用户打开泰语学习的大门。 基础泰语1安卓版软件操作流程和体验 1. 用户注册登录后,即可进入主界面,界面简洁明了,各个学习模块一目了然。 2. 课程学习流程jvzquC41o0msgnszh0ipo8frr1|92?5;30nuou
6.昆明泰语听力基础培训好学吗佩文其实你会不会本国/家的语言并不是较重要的,还是英语比较通用……人家也很好,会慢慢的很你说,然后回来我就报名了佩文教育的英语班,因为我基础很不好,是从零开始那种,现在上了一段时间,感觉相当好,也有联系口语,毕竟不是为了一时学习,我想学习的话就多学一下,多方面一点,嗯,想学的可以和我一起啊,我在佩文jvzq<84yyy4lo€fk{wkew7hqo1gtrlru1pkxu872473236=138;967mvon
7.2026年广东物理类350分能报什么大学4.大连外国语大学泰语专业 大连外国语大学泰语专业介绍一、什么是泰语专业?泰语专业属于文学门类中的外国语言文学类专业,本科生毕业后授予文学学士学位。学习泰语是从零开始的,即从字母开始学习。泰语(ภาษาไทย),也称傣语(Dailanguage),是傣泰民族的语言,属于东亚语系/汉藏语系的一种语言。全球有约6800万人口使用泰语。泰语不仅仅 jvzquC41yy}/ijtmcq4dp8lm/oh049616632/<:2
8.你的模型是否在我的数据集上训练过?模型感知的数据选择|高效扩展LL分析:本文探讨了Transformer模型从零开始学习新目标的能力,特别是能否通过组合已有的三段论来预测新的三段论。文章提出了'分布局部性'的概念,用以衡量常规Transformer模型在弱学习上是否能有效实现,其中局部性反映了除令牌直方图外,最少需要多少额外令牌才能与目标非平凡相关。实验和理论分析表明,具有高局部性的分布难以被高jvzquC41dnuh0lxfp0tfv8xkpcz`5@:963>81jwvkerf1mjvckrt1:92797:6=
9.《基础泰语4》(林秀梅)简介书评在线阅读2024-01-23 01:04:40分册名 :基础泰语2已购 赞评论 购书臭虫钻石会员 10分 开始学起来为了更好的看泰剧 2023-11-28 23:59:20分册名 :基础泰语1已购 赞评论 无昵称用户钻石会员 10分 很好很好很好很好很好很好很好 2023-11-09 13:45:24分册名 :基础泰语3已购 jvzq<84rtqjve}3fcpmecwl0eqs049=626;70qyon
10.AppStore上的《学习泰语(初学者)》想以简单灵活的方式学习泰语吗? 拥有全球超过3000万次下载量的BNR Languages应用程序,帮助您以实用、简单和独立的方式学习泰语。 完整课程让您可以从零开始,学习字母表,建立词汇量,并通过母语音频录音练习阅读、写作和听力。 自主学习,按自己的节奏学习,没有每日限制,并使用复习模式加强您已经学到的一切。 非常适合希jvzquC41crvt0jurng4dqv4oq1gqr8*G7'GE'J;'G6+C;.F2'G<&D<*D2'K9'JK'CF3&G>*::'?E'N:'CF+B8.J:':6&:>4kf8:83=6;96<
11.泰语0怎么说语言学习从来不是一蹴而就的事情,记住"เริ่มจากศูนย์"(从零开始)这句话,每天积累一点,终会在泰语世界里畅通无阻。jvzquC41yy}/srszwg9777hqo1~z|ƒ}1Vjgj1>;294>/j}rn
12.学泰语别再死记硬背!这招让发音自然上口✨这套书作者是廖宇夫老师,内容系统又接地气,从零开始一步步搭建语言框架,不会让人中途放弃 自学路上有个靠谱的“导师”真的太重要了,它就像一位安静却耐心的朋友,陪着你一点点进步 现在我的泰语已经能简单交流了,连泰国朋友都说口音挺地道jvzquC41lkgoiqz0vcuccx3eqo5hwjsinqibn8997;>`:m:f77l:g>=h;d:b4m77cc63;mg26g;g
13.从零开始学广东话这本就够(豆瓣)《从零开始学广东话这本就够》精心设计的内容,采用图文式自然记忆法,必定能让你的学习轻易而举、如鱼得水。 特色1:针对从零开始的学习者,强调图文式视觉学习。 特色2:角色扮演生动有趣,学习广东话超简单。 特色3: 跟着香港老师录制的MP3学习,掌握发音,反复练 jvzquC41dqul0mtwdct/exr1uwhkgly152<279>;1