qt的编程环境默许是utf-8编码格式(,其他具有的非常类都被叫作受检非凡

一:卓殊的基础知识

  • 目录

  • 前言

  • 软件条件

  • DNS域名服务器

  • DNS服务器原理

    • DNS域名空间

    • DNS区域

    • DNS服务器的连串

    • DNS查询方式

    • 缓存文件

  • 配置DNS服务器

  • DNS服务的选取

    • 新建子域

    • 在DNS正向解析中新建主机A或AAAA资源记录

    • 新建主机的别名CNAME资源记录

    • 邮箱互换器资源MX记录

    • 成立DNS正向解析区域

    • 新建反向解析区域和反向记录

    • 开创扶助区域

  • DNS的高档设置

    • 免去DNS客户端的缓存区

    • 消除DNS服务器的缓存区

    • 变动区域项目和区域文件名

    • 动态更新

    • 利用nslookup指令来查阅记录

    • 清除DNS缓存

总结:

  1.1
Java语言中的基本十分处理是环绕try-catch-finally、throws和throw那多少个主要词展开

Load Balance

Load
Balance
:负载均衡提供了一种有效的办法进步网络设施、服务器等设备的产出访问、保险互连网服务的灵活性和可用性。

LB的原理:将一个网络服务所急需处理的大方数码均衡的分摊到八个操作单元上拓展实践。

1.
qt输出粤语乱码原因分析

  try-catch-finally用于捕获分外并拓展拍卖;thrwos用于申明一(Wissu)个方法也许抛出的不行,对方法体中或者抛出的可怜都要拓展宣示;throw用于遇见错误的时候抛出一个具体的分外。

使用NLB来部署Web Farm集群

服务器集群
Cluster
:通过集群的合计和形式让大气的服务器同时扶助一个劳动,在客户端看来就如只有一台服务器在运行。集群可以利用多台统计机举办并行总括从而得到很高的乘除速度,也可以用多台计算机做备份,从而使得其余一个机器坏了方方面面连串或者能健康运作。集群化操作可以减弱单点故障数量,并且已毕了集群化资源的高可用性。

NLB(Network Load Balance):网络负载均衡,通过将多台IIS
Web服务器组成Web
Farm的主意,可以提供一个独具排错、负载平衡的高可用品质网站。当Web
Farm接收到七个分裂用户的连年请求时,这个请求会被疏散的送到Web
Farm中分化的Web服务器来拍卖,以此来增强访问作用。并且若Web
Farm中有Web服务器因为故障而望洋兴叹继续提供劳动时,会由其他依然可以正常运作的Web服务器来一连为用户提供服务,因而Web
Farm还存有故障转移的功能。

Web Farm架构 

公海赌船网站 1

  1. Web
    Farm内的每一台Web服务器的对外网卡各有一个静态IP地址。服务器通过那个静态IP对外发送流量。

  2. 创建一个NLB Cluster,将IIS Web Server插手到NLB
    Cluster中后,它们就会共享着同一个集群IP地址(虚拟IP地址)。并通过那几个集群IP地址来经受用户的上网请求。

  3. 当NLB接受到那几个请求后,会均衡的将那几个请求交由NLB Cluster中的IIS Web
    Server处理。这样就高达了负荷均衡的目的,增强了IIS Web
    Server的习性和可用性。

公海赌船网站 2

qt的编程环境默许是utf-8编码格式(关于编码见下文知识要点一);

  1.2 很是的分类

条件准备

准备服务器

  • Win08R2_PC1

    • Hostname=win08r2pc1

    • 网卡int1=192.168.1.100/24(StaticIP) \ 网卡int2=集群IP(先不设置)

    • DNS Service

    • IIS Web Service

    • FileService

  • Win08R2_PC2

    • Hostname=win08r2pc2

    • 网卡int1=192.168.1.200/24(StaticIP) \ 网卡int2=集群IP(先不安装)

    • IIS Web Service

  • Win7_pc1

    • Hostname=win7pc1

    • IP = 192.168.1.222/24

  • 虚拟网络VMNet1、VMNet2 

    • Win08r2pc1和Win08r2pc2中的int1int2独家连接到Net1Net2

配置上述准备条件并测试能照旧不能打响通讯

cout << "中文" << endl;

  Java中的非常能够分为三种格外类型–受检非常(checked exception)和非受检非凡(unchecked
exception)。非受检极度指的是java.lang.RuntimeException和java.lang.Error类及其子类,其余具备的相当类都被号称受检至极。两种档次的非凡在职能上尚未差异,唯一的歧异是选取受检很是时的合法性要在编译时刻由编译器来检测,由此受检十分在采用的时候需求比非受检万分越多的代码来逃避编译错误。

公海赌船网站,在Win08r2pc1中配置DNS服务

创建neishida.com,并在域内添加一条A记录(www.neishida.com <–>
192.168.1.8) 
注意:192.168.1.8 为集群IP,即用户发送请求的靶子IP。 

公海赌船网站 3

 
测试:在Win7pc1中解析www.neishida.com的域名

程序运行,程序并不认识ANSI,UTF-8以及任何其它编码.系统只知道处理你给它的字符的**二进制表示.**

  平素以来,关于在先后中到底是该行使受检非凡或者非受检分外,开发者之间直接留存着争辩,毕竟两者各有利害。受检非凡的风味在于它强制须要开发者在代码中举行显式的宣示和破获,否则就会生出编译错误。那种范围从好的地点来说,可以幸免开发者意外地忽视某些失误的场馆,因为编译器不容许出现未被拍卖的受检格外;从不佳的方面来说,受检非凡对先后中的设计提出了更高的要求。不适于的选择受检非凡,会使代码中充满着大批量没有实际作用、只是为了通过编译而丰盛的代码。而非受检卓殊的特性是,如若不抓获至极,不会时有发生编译错误,至极会在运行时刻才被抛出。非受检十分的便宜是足以去掉一部分不须求的百般处理代码,而不佳之处是开发者可能忽略某些应该处理的老大。

在Win08r2pc1中配备File Service文件服务

File Service用于存储Web服务器的共享设置和共享网页内容。 
Step1:在Win08r2pc1中新建一个地面安全用户,以便两台服务器的Web服务可以使用那几个账号来连接文件服务器。

千帆竞发 –> 管理工具 –> 总括机管理 –> 本地用户和组 –>
添加新用户webuser(打消下次登陆修改密码,拔取密码永然则期)
 

公海赌船网站 4

Step2:新建用于存放共享配置和共享站点网页文件的文本夹C:\\Webfiles,并给予用户webuser完全控制权限 

公海赌船网站 5

 
随即在共享文件夹Webfiles下创办多少个公文夹configurationsContents各自用于存放共享配置文件和网页文件

Step3:将共享文件夹的所有者设定为webuser,否则恐怕会油但是生是因为权力不足造成的陈设文件无法访问。 

公海赌船网站 6

 

  近年来的主流观点是,最好优先使用非受检很是。

在Win08r2pc1中部署IIS Web服务

Step1:添加IIS Web服务角色并设定使用ASP .NET为Web后端支撑 
Step2:更改站点欢迎页面的优先级最高为default.aspx,可以使得的增高网站的造访功用。

Step3:在默许的站点目录%SystemDrive%\inetpub\wwwroot下创制测试网页文件default.aspx。 
写入下列asp代码:

<b>客户端的IP地址为:</b><%Response.Write(Request.ServerVariables("remote_addr"))%><br><b>Web Server的IP地址是:<b><%Response.Write(Request.ServerVariables("local_addr"))%>1234

Step4:在Win7pc1中访问http://192.168.1.100测试Web服务是还是不是正常运转。 

公海赌船网站 7

至于  “中””文”
的3种编码二进制内容:

  1.3 相当表明是API的一有些

在win08r2pc2上部署IIS Web服务

与在win08r2pc1上安插web服务的步骤大致相同,可是不须要在win08r2pc2上写入default.aspx。 
安装达成将来,在win7pc1上访问http://192.168.1.200测试web服务时候正规运转。

 

  这一条提拔首借使对准受检非常的。在一个领会方法的宣示中行使throws关键词来声称其可能抛出的可怜的时候,那几个越发就改为那一个公开方法的一部分,属于开放API。在保安那几个公开API的时候,这几个越发有可能会对API的嬗变造成阻碍,使得编写代码时无法不考虑向后包容性的题目。

计划共享的站点文件夹

我们需求将三个Web服务器共同利用共享文件夹c:\Webfiles来作为站点文件夹

ANSI(GBK): 0xd6d0  0xcec4

  假使公开办法申明了会抛出一个受检相当,那么这一个API的使用者肯定已经运用了try-catch-finally来拍卖那些可怜。尽管在末端的本子更新中,发现该API抛出那一个非凡是不正好的,也不可以一直把这些丰盛的扬言删除。因为这么会造成此前的API使用者的代码不能通过编译。

win08r2pc1中的web共享配置

Step1:将win08r2pc1中的default.aspx文件复制到共享文件夹c:\Webfiles\Contents

Step2:将用户webuser加入到IIS_IUSRS组中。 

公海赌船网站 8

Step3:将共享文件夹c:\Webfiles\Contents作为win08r2pc1的Web服务站点文件夹。 
开拓Web网站Default Web Site的中坚设置 –> 在大体路径处输入
\192.168.1.100\Webfiles\Contents –> 点击连接为 –>
设定站点文件夹的指定访问用户为webuser
 

公海赌船网站 9

公海赌船网站 10

Step4:测试 

公海赌船网站 11

 
成就布置之后,无论是在win08r2pc1照旧在win08r2pc2中都不得不通过用户webuser来访问共享的站点文件夹。

Step5:在win7pc1中再一次输入http://192.168.1.100来做客网站。

Step6:配置Web1的共享设置 
先将Web1的共享设置和密钥导出到共享文件夹c:\Webfiles\configurations中。 
要求利用用户webuser的凭证来进展操作,并且必要为地方文件加密。 

公海赌船网站 12

输入密钥密码后导出密钥 

公海赌船网站 13

公海赌船网站 14

Step7:公司Web1的共享配置效益 

公海赌船网站 15

公海赌船网站 16

 
此刻在win08r2pc1中的Web服务密钥就会备份到当地电脑的%Systemroot%\System32\inetsrv\config文件夹中。

Step8:重启Web服务器使配置生效

 

  因而,对于API的设计者来说,谨慎考虑每个公开方法所声明的可怜是很有要求的。因为只要加了万分表明,在很长的一段时间内部都不可以舍弃它。那也是为啥推荐应用非受检非凡的一个紧要原因,非受检分外不须求声明就足以一向抛出。可是对于一个艺术抛出的非受检非凡,也急需在文档中展开求证。

win08r2pc2中的web共享配置

Step1:在win08r2pc2中开创一个用于访问共享站点文件夹的同名用户webuser,并让webuser隶属于IIS_IUSERS组。

Step2:将win08r2pc2的站点目录设置为\\192.168.1.100\Webfiles\Contents 

公海赌船网站 17

Step3:在win7pc1中输入http://192.168.1.200测试是还是不是可以健康访问win08r2pc2的web服务 

公海赌船网站 18

Step4:设置win08r2pc2中的网站共享设置 

公海赌船网站 19

Step5:重启IIS Web服务使配置生效

UTF-8: 0xe4b8ad 0xe69687

二.创造自已的不得了

创建NLB集群

Step1:分别在win08r2pc1和win08r2pc2中安装网络负责人均功能。 
注意:每一台需求投入到集群中的服务器都要求设置NLB效率模块。 
打开服务器管理器 –> 功效 –> 添加功效 –> 网络负载均衡 

公海赌船网站 20

Step2:在win08r2pc1中新建集群 
开班 –> 管理工具 –> 互连网负载平均管理器 –>
右击互联网负载平均群集 –> 新建群集 –> 输入主机 –> 点击连接 –>
接纳int1 –> 下一步
 

公海赌船网站 21

公海赌船网站 22

 
其中优先级作为集群中主机的绝无仅有标识符HostID,每一台主机只可以有唯一的一个先期级。

Step3:设置虚拟IP:192.168.1.8 

公海赌船网站 23

Step4:接纳单播的集群方式 

公海赌船网站 24

 
集群的操作格局

  • 单播方式:NLB集群中的每一台服务器中的MAC地址,都会被替换成同一个集群MAC地址。每一台服务器都会通过集群MAC地址来接过再而三到Web
    Farm的伸手。

  • 多播情势:多播的数据包会同时的传递到多台服务器中,这个计算机属于同一个多播组,它们有着一个同台的多播MAC地址

Step5:点击已毕,使用默许的端口规则 

公海赌船网站 25

Step6:等待NLB将win08r2pc1聚合到集群中 

公海赌船网站 26

Step7:将win08r2pc2添加到NLB集群中 
在NLB管理器中右击192.168.1.8 –> 选取添加主机到集群 –>
在主机处填入win08r2pc2的IP地址或者Hostname –>拔取网卡int1 –>
点击下一步
 

公海赌船网站 27

优先级默许为2 

公海赌船网站 28

Step8:等待win08r2pc2凑合完成。 

公海赌船网站 29

Step9:在win7pc1中访问http://www.neishida.com测试NLB是不是正规运转

公海赌船网站 30

注意:即使出现了500 内部错误的话能够尝试Run
–> iisreset来重启IIS Web服务。

 

  2.1精心设计相当的层次结构

NLB的高档管理

Unicode: 0x4e2d 0x6587

  一般的话,一个程序中应有要有协调的丰硕类的层次结构。借使只打算动用非受检非凡,至少需求一个后续自RuntimeException的那一个类。要是还需求使用受检卓殊,还有此外一个一而再自Exception的不行类。假诺程序中可能现身的十分景况相比较多,应该在不相同的抽象层次上定义相关的非凡,并摇身一变一个整机的层次结构。这么些丰裕的层次结构与程序本身的类层次结构是相呼应的。差别抽象层次上的代码应该只申明抛出同一个层次上的相关至极。

编制端口规则

公海赌船网站 31

集群IP地址:选用适用于此规则的集群IP地址。默许为颇具集群IP地址都采纳此规则。 
端口范围:此端口规则所含有的端口范围。 
筛选方式

  • 三个主机:表示集群中具备的服务器都会处理进入集群的互联网请求,共同来提供互连网负载均衡和排错效用。集群中每一台服务器的负荷比重默许都是一律的。大家也足以经过右击服务器名称
    –> 主机属性 –> 端口规则选项卡 –>
    编辑
    来为每一台服务器设定不一致的负载比重。 

  • 公海赌船网站 32

  • 单纯主机:表示此规则有关的流量都交由单一的服务器来拍卖。

  • 禁用此端口范围:所有与此端口规则相关的流量都会被NLB集群阻挡。

转载自:http://blog.csdn.net/jmilk

1)在简体普通话Windows下的控制台彰显环境是ANSI编码(代码页936,
GBK),先明了这一点.

  2.2卓殊类中隐含丰盛的音信

一言九鼎不一致,MinGW看到的是”0xe4b8ad”和”0xe69687″(gcc默许UTF-8).注意,用MinGW编译的源文件中有中文宽字符必须保留为UTF-8编码.

  至极存在的一个很关键的意思在于,当错误发生的时候,调用者可以对不当进行处理,从爆发的荒唐中回复。为了便于调用者处理那一个尤其,每个万分中都亟待包涵尽量丰盛的信息。万分不该只表达某些错误暴发了,还相应交由相关的新闻。相当类是完全的Java类,因而在中间添加所需的域和艺术是一件很粗略的事务。

2)测试代码:

  2.3 非常与不当提醒

#include <iostream>
using namespace std;

int main()
{
    char a[] = "中文";
    cout << a << endl;
    return 0;
}

  对于与用户展开互动的程序来说,需求得体区分极度与体现给用户的错误提醒。

3)经在qt5.8中测试乱码;

  

解析:参见(下文知识要点一,知识要点二)简单察觉UTF-8只是一种编码举办方案,并不是实际上编码;再参见(知识要点五),程序运行是能过最终编译落成的二进制码输出

在vs2017中,用unicode编码情势,编译运行输出正常;原因我想很好驾驭了,当程序编译后保存的是“中文”unicode二进制编码,而控制台出口时CodePage
(GBK 936)
这几个CodePage就会按照映射表去各种对应GBK中的普通话字,再开展输出;

而在qt5.8(MinGW)中,输出则是乱码;因为qt5.8默许的编码格局是UTF-8;当程序编译后保存的是“粤语”UTF-8二进制编码,而决定台出口时CodePage
(GBK 936)
这么些CodePage就会根据映射表去各种对应GBK中的普通话字,好像哪儿不对,好了,难题就出在此时了,CodePage是各国与unicode的映射表,并不是与UTF-8的(文化要点二CodePage),在qt5.8(MinGW)中,原程被编译二进制文件,保存下去的“普通话”地址是,UTF-8编码,而映射表是在unicode中找内容,再进行输出,自然就是乱码;

网上解决形式1.改动注册表CodePage 65001  经测试依然乱码

辩论分析:CodePage(GBK
936)找不到映射,那么把控制台换成UTF-8;那么然先保存的,UTF-8国语,再经过UTF-8对应的汉字码,不就能出口汉字;理论好像可行,但在本人的win7
64位中文系统上,qt5.8,vs2017均失败;

可能原因:我系统中cmd控制台并不辅助UTF-8编码格局(有空子在win10中测试后再做补充)

解决方法2:通过(知识点一,二,
五),总计,当要在控制台举办中文输出时,编码格局应该保留为unicode,或ACSI(GBK);

4)关于宽字节出口乱码的标题;

输出宽字节中文(详见文化要点四):例

#include <iostream>
using namespace std;

int main()
{
    wcout << L"中文" << endl;
    return 0;
}

出口则要用wcout而无法是cout;关于宽字符详见;知识要点二后续,**文化要点三**

在vs2017中,输出粤语,为空;

1、cout和wcout

 在C++下,cout可以一向出口中文,但对此wcout却百般。对于wcout,需求将其locale设为本地语言才能出口中文:

 wcout.imbue(locale(locale(),””,LC_CTYPE));

 也有人用如下语句的,但那会变动wcout的有所locale设置,比如数字“1234”会输出为“1,234”。

 wcout.imbue(locale(“”));

 在C语言下,locale设置为地面语言(C语言中只有全局locale)就足以健康输出了:

 setlocale(LC_CTYPE, “”);

 在qt5.8(MinGW)环境中,以上并不实用,方今还没找到出口汉语的法子,未完待续;

 

文化要点一:编码**

ASCII:
早期的字符集,7位,128个字符,包涵大小写a-z字母,0-9数字以及部分操纵字符.

  扩展ASCII: 1个字节8位,只用7位不合理.于是第8位用于扩展ASCII字符集,那样就又多了128个字符.于是用着后128个字符来扩张表示如拉丁字母,希腊共和国(Ελληνική Δημοκρατία)字母等特殊符号.但难点是亚洲那一票国家很多彼此都享有区其余更加字母,一起塞进后128个无不侧目不够,于是代码页出现了.

**  Code Page(代码页)**:
1个字节前128个字符大家集合和ASCII一样,而后128个字符,按照分化系统所谓代码页来分别种种语言不雷同的假名和符号.

**  DBCS(双字节字符集)**:
对于澳国国度,后128个字符如故不可以包括大批量的象形文字,DBCS正是为此的一个解决方案.DBCS由一个或七个字节表示一个字符,这评释DBCS并不一定是七个字节,对于如英文字母,是向ASCII包容的,依旧由1个字节表示,而对于如汉语则用2个字节表示.英文和中文可以统一地拍卖,而区分是或不是为华语编码的法子是2个字节中的高字节的第二位为1,就务须检查后边紧跟着的十分字节,2个字节一起解释为1个字符.GB2312,GBK到GB18030都属于DBCS.此外,简体汉语Windows下的ANSI编码平常是指GBK(代码页936).

DBCS很大标题在于字符串的字符数不可以透过字节数来支配,如”中文abc”,字符数是5,而字节数是7.对于用++或–运算符来遍历字符串的程序员来说,那大致就是惊恐不已的梦!

  Unicode: 学名为”Universal Multiple-Octet
Coded Character Set
“,简称”UCS“.UCS可以看作是”Unicode Character
Set”的缩写.

也是一种字符集/字符编码方法,它统一用唯一的字符集来含有这么些星球上绝一大半言语的书写系统.UCS向ASCII包容(即前128个字符是一律的),但并不般配DBCS,因为任何字符在UCS中被再次编码(重新布署地方).

UCS有两种格式:UCS-2和UCS-4.前者用2个字节(16位)编码,后者用4个字节(实际上只用31位)编码.USC-4前2个字节都为0的一些号称BMP(基本多语言平面),就是说BMP去掉前2个零字节就是UCS-2.近来的UCS-4规范中还不曾任何字符被分配在BMP之外.(说白了,USC-4就是为当16位的USC-2都被分配完时候做再做扩充用的,现在还没用到)

  UTF-8,UTF-16,UTF-32: “Unicode transformation
format”(UTF)
 ,即Unicode的传输格式.Unicode规定了怎么编码字符,而UTF规定怎么将一个Unicode字符单元映射到字节序来传输或保存.

UTF-16UTF-32各自代表以16位和32位为一个Unicode单元举办编码,其实UTF-16对应就是UCS-2,UTF-32对应就是UCS-4(UCS-2和UCS-4是陈旧的传教,应废弃).
其余,平常说的Unicode就是指UTF-16.

UTF-8是关键!就算统一Unicode都用2字节意味着,英文字母觉得温馨就很吃亏(高字节始终是0字节).UTF-8提供了一种灵活的解决办法:以单字节(8bit)作为编码单元,变长多字节编码格局.如ASCII字母继续选拔1字节储存,普通话汉字用3字节囤积,其余最多可直6字节.

UTF-16和UTF-32要求有字节序标志BOM(FEFF)解决大端小端难点.UTF-8没有字节序的题目(因为以1个字节为单元).

 

===============================================================================

其余注意点:

DBCS准确说,应该是MBCS(Multi-Byte Chactacter
System, 多字节字符系统).

字符集(Charset)和编码(Encoding)注意不相同.如GBK,GB2312以及Unicode都既是字符集,也是编码情势,而UTF-8只是编码格局,并不是字符集.

Linux下The GUN
C Library(从glibc
2.2开端)中宽字符wchar_t是以32位的Unicode(USC-4)表示.如宽字符”中”字为
“0x00004e2d”.而Windows下的CRT使用宽字符仍是16位的.

 

知识要点二:关于Unicode的体会(加深对编码的知道)

析Unicode和UTF-8 

一、首先说明一(Wissu)下现行常用的一对编码方案:
1.
在神州,大陆最常用的就是GBK18030编码,除此之外还有GBK,GB2312,那多少个编码的涉嫌是那般的。
最早制定的汉字编码是GB2312,包罗6763个汉字和682个其余符号
95年重新修订了编码,命名GBK1.0,共收录了21886个标志。
其后又推出了GBK18030编码,共收录了27484个汉字,同时还引用了藏文、蒙文、维吾尔文等紧要的少数民族文字,现在WINDOWS平台必必要协助GBK18030编码。
坚守GBK18030、GBK、GB2312的种种,3种编码是向下包容,同一个中国字在多少个编码方案中是一模一样的编码。
2.  海南,香岛等地运用的是BIG5编码
3.  日本:SJIS编码
二、Unicode
  固然把各个文字编码形容为各省的方言,那么Unicode就是社会风气各国协作开发的一种语言。
  在这种语言环境下,不会再有语言的编码争辨,在同屏下,能够显示任何语言的内容,那就是Unicode的最大好处。
  那么Unicode是哪些编码的吗?其实卓殊不难。
  就是将世界上有所的文字用2个字节统一开展编码。可能您会问,2个字节最多能够代表65536个编码,够用啊?
  大韩民国和东瀛的多数中国字都是从中国流传过去的,字型是截然一致的。
  比如:“文”字,GBK和SJIS中都是同一个汉字,只是编码差距而已。
  那样,像那样统一编码,2个字节就曾经够用容纳世界上所有的语言的一大半文字了。
UCS-2 与UCS-4
  Unicode的学名是”Universal Multiple-Octet Coded Character
Set”,简称为UCS。
  现在用的是UCS-2,即2个字节编码,而UCS-4是为着避防未来2个字节不够用才开发的。UCS-2也叫做基本多文会平面。
  UCS-2转换来UCS-4只是概括的在后边加2个字节0。
  UCS-4则要害用来保存协理平面,例如Unicode 4.0中的第二协理平面
  20000-20FFF – 21000-21FFF – 22000-22FFF – 23000-23FFF – 24000-24FFF

  • 25000-25FFF –   26000-26FFF   - 27000-27FFF – 28000-28FFF –
    29000-29FFF – 2A000-2AFFF – 2F000-2FFFF
      总共伸张了16个帮扶平面,由原来的65536个编码增加至邻近100万编码。
    三、 兼容codepage
      那么既然统一了编码,如何合营原先各国的文字编码呢?
      这么些时候就要求codepage了。
      什么是codepage?codepage就是各国的文字编码和Unicode之间的映射表。
      比如简体汉语和Unicode的映射表就是CP936,点这里查看法定的映射表。
      以下是多少个常用的codepage,相应的改动下边的地点的数字即可。
      codepage=936 简体普通话GBK
      codepage=950 繁体中文BIG5
      codepage=437 美利坚联邦合众国/加拿大土耳其语
      codepage=932 日文
      codepage=949 韩文
      codepage=866 俄文
      codepage=65001 unicode UFT-8
    最终一个65001,据个人通晓,应该只是一个虚构的映射表,实际只是一个算法而已。
    从936中随机取一行,例如:
    0x9993 0x6ABD #CJK UNIFIED IDEOGRAPH
    面前的编码是GBK的编码,前面的是Unicode。
    透过查那张表,就能大约的落到实处GBK和Unicode之间的更换。
    四、UTF-8
      现在知道了Unicode,那么UTF-8又是何许啊?又为什么会并发UTF-8呢?
      ASCII转换成UCS-2,只是在编码前插入一个0x0。用那个编码,会席卷一些控制符,比如
    ” 或
    ‘/’,这在UNIX和部分C函数中,将会暴发严重错误。因而可以一定,UCS-2不合乎当作Unicode的外部编码。
      因而,才出生了UTF-8。那么UTF-8是如何编码的?又是怎么着化解UCS-2的标题吧?
    例:
    E4 BD A0        11100100 10111101
    10100000
    这是“你”字的UTF-8编码
    4F 60          01001111
    01100000
    这是“你”的Unicode编码
    关于汉字根据UTF-8的编码规则,分解如下:xxxx0100 xx111101 xx100000
    把除了x之外的数字拼接在联名,就变成“你”的Unicode编码了。
    留神UTF-8的最终面3个1,表示一切UTF-8串是由3个字节构成的。
    经过UTF-8编码之后,再也不会出现敏感字符了,因为最高位始终为1。
    以下是Unicode和UTF-8之间的转换关系表:
    U-00000000 – U-0000007F: 0xxxxxxx
    U-00000080 – U-000007FF: 110xxxxx 10xxxxxx
    U-00000800 – U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
    U-00010000 – U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
    U-00200000 – U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
    U-04000000 – U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
    10xxxxxx、
    Unicode编码转换来UTF-8,针对粤语,不难的把Unicode字节流套到x中就改成UTF-8了。

续篇:

unicode在windows api中的应用
    实际上,常涉及的Win32
API的名目并不是它们的真实性名称。这一个名称仅仅是局地宏,你可以在PSDK的头文件中找到这么些宏对用的函数名称。所以,假使PSDK的文档提到一个函数,如CreateFile,开发人员应该发现到它不过是一个宏。它的实在名称是CreateFileA和CreateFileW。是的,它代表了“多少个”函数名,而不是一个,是同一个函数在分歧Win32函数的多个例外的本子。以’A’结尾的函数接受ANSI字符串(char *),即Unicode字符串(wchar_t
*)而在vs中可以用WCHAR宏代替,即wchar_ts型字符串。二种版本的函数都在模块kernel32.dll中落成,借使您的编程环境是Unicode则,则宏CreateFile在编译是会被CreateFileW代替,否则用CreateFileA代替。

PSDK的字符串解决方案:TCHARs
   
为了防止为分化的windows操作系统开发差别版本的PSDK,微软制定了一个合并的字符串类型TCHARs。TCHAR以及其它的照应的宏在头文件WinNT.h中有定义。程序员在先后中不必要为利用char仍旧wchar_t而纠结,只须求运用宏TCHAR就足以了。根据Unicode环境是不是存在,编译器会活动进行对应的转移。同样道理,程序员不要求为利用’A’还是’W’型Win32
API函数纠结。

对于较前期的系列均选择ACSI编码,而在风行系统中则都统一为unicode编码(如:手机系统)

 

知识要点三:
L”……”,
_T(), _TEXT
,TEXT()

L”……”: L是意味字符串资源转为宽字符的保留(平日转为unicode),却未必是unicode字符,那与编译器完毕相关。

_T(” ……”) 是一个适配的宏     #ifdef _UNICODE(当系统环境是unicod下)
_T就是L   而当系统环境是ACSI 
_T就是ANSI的。(有便民早期windows系编程文件的移植,达到新旧序列相互)

_T、_TEXT、TEXT 三者效果同样

tchar.h是运行时的头文件,_T、_TEXT 根据_UNICODE来确定宏
winnt.h是Win的头文件按照,TEXT 根据UNICODE 来确定宏

如果急需同时接纳那3个宏,则需同时定义 UNICODE 和 _UNICODE
VS2010随后的本子中
,设置:项目–属性–配置属性–常规–字符集–使用Unicode字符集,
那么编译器命令选项中真的同时插手了_UNICODE和UNICODE。

文化要点四: c++ 的cout 与
wcout**

cout << "hello world!" << endl; //ACSI 编码输出

cout << L“hello world!” <<endl;// unicode 输出

当输出双字节编码到控制台时,cout输出的将是地方而不要内容这时就要用到wcout;

改为:

cout << "hello world!" << endl; //ACSI 编码输出

wcout << L“hello world!” <<endl;// unicode 输出

** 


文化要点五:编译连接进度

1.预处理 生成.i文件

C++的预处理是指在C++程序源代码被编译从前,由预处理器对C++程序源代码进行的拍卖。这几个历程并不对先后的源代码举办分析。

那边的预处理器(preprocessor)是指真的的编译开端此前由编译器调用的一个独立程序。

预处理爱戴要承担以下的几处

1.宏的替换

2.刨除注释

3.拍卖预处理指令,如#include,#ifdef

 2.编译和优化 生成汇编.s原文件

词法分析 — 识别单词,确认词类;比如int
i;知道int是一个档次,i是一个根本字以及判断i的名字是不是合法
语法分析 — 识别短语和句型的语法属性;

语义分析 — 确认单词、短语和句型的语义特征;

代码优化 — 修辞、文本编辑;

代码生成 — 生成译文。

3.生成**.o**目的文件


汇编进程实际上指把汇编语言代码翻译成目标机器指令的历程。

在最后的靶子文件中

除去有着自己的数目和二进制代码之外,还要至少提供2个表:未缓解符号表和导出符号表,分别报告链接器自己必要如何和可以提供什么。

编译器把一个cpp编译为目标文件的时候,除了要在对象文件里写入cpp里带有的多少和代码,还要至少提供3个表:未缓解符号表,导出符号表和地址重定向表。
未缓解符号表提供了有着在该编译单元里引用不过定义并不在本编译单元里的符号及其现身的地方。
导出符号表提供了本编译单元具有定义,并且愿意提必要任何编译单元使用的号子及其地址。
地址重定向表提供了本编译单元所有对我地址的引用的记录。

4.链接

由汇编程序生成的靶子文件并不可以及时就被执行,其中可能还有不少尚无解决的标题。例如,某个源文件中的函数可能引用了另一个源文件中定义的某个符号(如变量或者函数调用等);在先后中恐怕调用了某个库文件中的函数,等等。所有的那么些题材,都亟需经链接程序的拍卖方能得以化解。

 

相关文章