字符编码之间的相互转换
codesys ascii码转换指令
标题:深度探讨CODESYS ASCII码转换指令在工业自动化领域中,PLC编程是一个非常重要的环节。
而对于其中的编码问题,很多初学者可能会遇到困惑。
本文将深入探讨CODESYS 中的ASCII码转换指令,希望可以为读者带来一些帮助和启发。
1. 什么是CODESYS ASCII码转换指令CODESYS是一种用于编写控制程序的开发环境,它支持多种编程语言和标准化的PLC编程。
而ASCII码转换指令则是其中的一个重要功能,它可以实现字符与ASCII码之间的相互转换。
在实际的工程中,我们经常需要将字符转换为ASCII码或者反向操作,以满足不同设备之间的通讯需要。
2. ASCII码转换指令的基本语法在CODESYS中,ASCII码转换指令主要包括TO_ASCII、TO_X和TO_STRING这三种基本形式。
其中,TO_ASCII可以将字符转换为对应的ASCII码,TO_X可以将数字直接转换为对应的字符,TO_STRING则可以将ASCII码数组转换为字符串类型。
这些指令的语法简单易懂,但在实际使用中需要注意参数的正确传递和数据类型的匹配。
3. ASCII码转换指令的应用场景在实际工程中,ASCII码转换指令可以广泛应用于各种设备之间的通讯和数据处理过程中。
比如在串口通讯中,我们经常需要将字符转换为ASCII码发送到其他设备;在人机界面中,我们也经常需要将ASCII码转换为字符进行显示和交互。
了解和熟练掌握这些指令,对于提高工程师的编程效率和质量都有很大的帮助。
4. 个人观点和总结在工业自动化领域,编程是一项极为重要的工作。
而对于其中的编码问题,掌握好ASCII码转换指令是非常必要的。
它不仅可以提高工程师的编程效率和质量,还可以拓展程序的应用范围和灵活性。
我个人认为深入了解和熟练掌握这些指令是每个PLC编程人员都应该做到的。
以上就是对CODESYS ASCII码转换指令的深入探讨,希望对读者有所帮助。
希望读者在实际应用中能够灵活运用这些指令,为工程的顺利进行贡献自己的一份力量。
Python的ASCII,GB2312,Unicode,UTF-8相互转换
Python的ASCII,GB2312,Unicode,UTF-8相互转换ASCII 是⼀种字符集,包括⼤⼩写的英⽂字母、数字、控制字符等,它⽤⼀个字节表⽰,范围是 0-127 Unicode分为UTF-8和UTF-16。
UTF-8变长度的,最多 6 个字节,⼩于 127 的字符⽤⼀个字节表⽰,与 ASCII 字符集的结果⼀样,ASCII 编码下的英语⽂本不需要修改就可以当作 UTF-8 编码进⾏处理。
Python 从 2.2 开始⽀持 Unicode ,函数 decode( char_set )可以实现其它编码到 Unicode 的转换,函数 encode( char_set )实现 Unicode 到其它编码⽅式的转换。
⽐如("你好").decode( "GB2312")将得到u'\u4f60\u597d',即 "你"和“好"的 Unicode 码分别是 0x4f60 和 0x597d再⽤(u'\u4f60\u597d').encode("UTF-8")将得到'\xe4\xbd\xa0\xe5\xa5\xbd'它是 “你好”的UTF-8编码结果。
python中使⽤ unicode的关键:unicode是⼀个类,函数unicode(str,"utf8")从utf8编码(当然也可以是别的编码)的字符串str⽣成 unicode类的对象,⽽函数unc.encode("utf8")将unicode类的对象unc转换为(编码为)utf8编码(当然也可以是别的编码)的字符串。
于是,编写unicode相关程序,需要做的事情是 * 获取数据(字符串)时,⽤unicode(str, "utf8")⽣成unicode对象 * 在程序中仅使⽤unicode对象,对程序中出现的字符串常量都以u"字符串"的形式书写 * 输出时,可将unicode对象转换为任意编码输出,使⽤str.encode("some_encoding")>>> unicode("你好", "utf8")u'\u4f60\u597d'>>> x = _>>> type(x)>>> type("你好")>>> x.encode("utf8")'\xe4\xbd\xa0\xe5\xa5\xbd'>>> x.encode("gbk")'\xc4\xe3\xba\xc3'>>> x.encode("gb2312")'\xc4\xe3\xba\xc3'>>> print x你好>>> print x.encode("utf8")你好>>> print x.encode("gbk")以上是测试结果(Ubuntu 6.06,locale为utf8),注意type(x)和type("你好")的区别。
ucs2编码和utf8编码关系
ucs2编码和utf8编码关系一、引言编码是计算机中非常重要的概念,它是将字符转换为二进制数的过程。
在计算机中,字符是以二进制数的形式存储的,因此编码可以看作是将字符转换为计算机可以识别的二进制数的过程。
在编码中,ucs2和utf8是两种常见的编码方式。
二、ucs2编码1. ucs2编码概述ucs2(Universal Character Set 2)编码是一种固定长度的Unicode编码方式。
它使用16位(即2个字节)来表示一个字符,因此可以表示65536个不同的字符。
2. ucs2编码特点(1)固定长度:每个字符都占用16位,即2个字节。
(2)适合表示亚洲语言:由于亚洲语言中有大量汉字等复杂字符,而ucs2编码能够覆盖这些字符,因此适合用于表示亚洲语言。
(3)不支持扩展:由于每个字符都占用16位,因此不能够支持Unicode扩展区域中新增加的字符。
三、utf8编码1. utf8编码概述utf8(Unicode Transformation Format 8-bit)是一种可变长度的Unicode编码方式。
它使用1-4个字节来表示一个字符,根据需要动态调整字节长度。
2. utf8编码特点(1)可变长度:每个字符所占用的字节数不固定,根据需要动态调整字节长度。
(2)兼容ASCII:对于ASCII字符,utf8编码只需要使用一个字节来表示。
(3)支持扩展:由于每个字符所占用的字节数不固定,因此可以支持Unicode扩展区域中新增加的字符。
四、ucs2编码和utf8编码关系1. ucs2编码和utf8编码之间的转换ucs2编码和utf8编码之间可以进行相互转换。
对于单个字符,可以通过将其转换为二进制数后再进行相应的转换。
对于多个字符组成的字符串,则需要先将其进行分割,然后对每个字符进行转换。
2. ucs2编码和utf8编码的应用场景(1)ucs2编码适合用于表示亚洲语言,在一些中文网站和应用程序中广泛使用。
#是什么编码unicode两种编码方式与中文的转换
#是什么编码unicode两种编码⽅式与中⽂的转换unicode的表⽰⽅式有两种,⼀种为web页⾯中使⽤的,⼀种为我们⼀般采⽤的编码⽅式第⼀种:"成都 "Unicode编码⽅式 &+编号是⽹页⾥引⽤unicode字符的⽅法,编号为⼗进制的在unicode中的编号第⼆种:\u6210\u90fd 表⽰的也是成都,采⽤的也是unicode编码格式,是java编程中使⽤的编码格式它以\u开头,后接四位16进制的数。
以下是java中之间相互转化的代码/** string与unicode之间相互转换*/import java.util.regex.Matcher;import java.util.regex.Pattern;public class unicodeString {public static void main(String[] args) {String str = "中国";System.out.println(unicodeString.StringToWebUnicode(str));System.out.println(unicodeString.WebUnicodeToString("中国"));System.out.println(unicodeString.StringToUnicode(str));System.out.println(unicodeString.UnicodeToString("\u4e2d\u56fd\\uqqqq"));}/** 普通类型的unicode转string*/public static String UnicodeToString(String input) {Pattern pattern = pile("(\\\\u(\\p{XDigit}{4}))");Matcher matcher = pattern.matcher(input);char ch;while (matcher.find()) {ch = (char) Integer.parseInt(matcher.group(2), 16);input = input.replace(matcher.group(1), ch + "");}return input;}/** string转普通类型的unicode*/public static String StringToUnicode(String input) {String str = "";for (char c : input.toCharArray()) {if ((int) c > 128)str += "\\u" + Integer.toHexString((int) c);elsestr += c;}return str;}/** string转web类型的unicode*/public static String StringToWebUnicode(String input) {String str = "";for (char c : input.toCharArray()) {str += "&#" + (int) c + ";";}return str;}/** web类型的unicode转string*/public static String WebUnicodeToString(String input) {String str = "";String[] y1 = input.split(";");for (String c : y1) {if (c.length() > 2) {str += (char) Integer.parseInt(c.substring(2));}}return str;}}js下将unicode转换为中⽂或字符串的代码<script>//带;号var str="最新發https://www.jb51.net/article/1.htm //不带分号var str2="https://www.jb51.net/article/1.htm";function uncode(str) {return str.replace(/&#(x)?([^&]{1,5});?/g, function (a, b, c) {return String.fromCharCode(parseInt(c, b ? 16 : 10));})}document.write(uncode(str));document.write("<br>");document.write(uncode(str2));</script>&#是什么编码在⽹页中以&#开头的是HTML实体,⼀些字符在 HTML 中是预留的,拥有特殊的含义,⽐如⼩于号‘<’⽤于定义 HTML 标签的开始。
常用编码方式及其格式转换
常用编码方式及其格式转换编码方式是计算机处理信息和传输信息的重要工具,它允许我们通过在不同计算机系统之间保存和传输数据来改善数据交换的效率。
在这种情况下,一个编码方式可以翻译计算机数据,使其可以通过不同的计算机系统传输。
常用的编码方式有二进制编码、字符编码、Unicode编码、UTF-8编码等,它们各有特定用途,适用于不同的系统、不同的数据和不同的媒介。
首先,二进制编码是计算机最基本的表示形式,二进制编码由二进制位组成,每个二进制位只有两个状态:1和0。
这种编码常用于硬件控制,因为每个二进制位只有两种可能的状态,可以非常容易地用0和1来表示计算机的输入和输出。
其次,字符编码是将排列的字符表示为对应的数字码,比如ASCII,它在英文中可以表示128个字符。
如果想要在不同的计算机语言中准确传输数据,那么字符编码就十分重要,因为它代表了每个字母或符号的数字码,所以可以非常准确地传输数据。
此外,Unicode编码是一种超大容量的编码方式,支持多种语言。
相比于其他编码方式,Unicode编码可以记录更多的字符,比如中文字母等。
Unicode可以用16位的编码表示数据,并且Unicode编码也可以将不同的语言进行编码转换,使得不同的机器可以正确识别不同的语言。
最后,UTF-8编码是Unicode的一种变种,它支持英文、中文、日语、韩语等多种语言,使用8位的编码表示,比Unicode编码更加紧凑。
UTF-8编码支持中文、拉丁文、希腊文等多种语言,是网页上常用的编码,打开网页时,编码一般为UTF-8。
总结以上,常用的编码方式有二进制编码、字符编码、Unicode 编码和UTF-8编码,他们都有特定的用途,每种编码都可以用来在不同的计算机系统之间传输信息或是表示不同的字符。
不同的编码方式也可以互相转换,比如二进制编码和字符编码可以互相转换,Unicode 编码可以转换成UTF-8编码,这使得不同的计算机系统之间可以顺利地传输信息。
ansi to utf-8 converter的用法
ansi to utf-8 converter的用法ANSI to UTF-8 Converter 是一种用于将 ANSI 编码的文本转换为 UTF-8 编码的工具。
在理解其用法之前,我们需要了解一些相关的背景知识。
1. ANSI 编码和 UTF-8 编码的区别:ANSI(American National Standards Institute)是一种字符编码标准,用于以 8 位字节的形式表示英文字符和一些特殊字符。
然而,ANSI 编码不支持国际字符集。
相比之下,UTF-8(Unicode Transformation Format)是一种更为通用的字符编码标准,支持几乎所有国际语言的字符。
2. ANSI 编码与 UTF-8 编码之间的转换:ANSI 编码和 UTF-8 编码之间的转换是必要的,特别是在处理包含多种语言字符的文本时。
ANSI 编码的文本可能无法正确显示或处理某些国际字符。
而将文本转换为 UTF-8 编码可以确保文本文件在任何设备或操作系统上都能正确显示。
ANSI to UTF-8 Converter 提供了一个简单而强大的工具,帮助我们轻松地完成 ANSI 编码到 UTF-8 编码的转换。
以下是其主要的用法和操作步骤:1. 下载和安装:首先,我们需要从官方网站或可信的来源下载和安装 ANSIto UTF-8 Converter。
安装完成后,可以在我们的计算机上找到相应的应用程序。
2. 打开 ANSI 到 UTF-8 Converter:双击打开已安装的 ANSI to UTF-8 Converter 应用程序。
一旦应用程序加载完成,我们将看到一个简单的用户界面。
3. 选择文件:在 ANSI to UTF-8 Converter 的用户界面中,我们可以看到一个“选择文件”按钮。
点击该按钮来选择需要转换的 ANSI 编码文本文件。
可以是单个文件或多个文件。
4. 文件预览:选择文件后,ANSI to UTF-8 Converter 将显示该文件的预览。
unicode与ansi转换规则
unicode与ansi转换规则Unicode和ANSI都是字符编码标准,但是它们之间存在转换规则,因为两种编码方式之间并不兼容。
在进行字符转换时,需要一定的方法来确保成功转换。
本文将阐述Unicode和ANSI之间的转换规则,并详细描述如何完成转换。
一、Unicode和ANSI的概述Unicode是一种字符编码标准,可以用来表示世界上大多数语言的字符。
它的编码范围广泛,包括从基本的拉丁字母到中文和阿拉伯字符。
Unicode使用16位和32位编码方案,其中16位编码支持计算机基础设施的交换,32位编码则支持更高级别的语言如藏文和古文物。
ANSI(American National Standards Institute)是一种表示字符的方式,是一种针对西方语言所设计的字符编码标准。
ANSI编码支持虚拟码、ASCII码和扩展ASCII码。
二、Unicode向ANSI转换的方法以下列出三种常见的Unicode向ANSI转换的方法。
1、直接截取转换Unicode和ANSI编码之间存在一种直接截取的转换方法。
但需要注意的是,这种方法只适用于转换基本ASCII字符,不适用于转换包含特殊字符或扩展字符集的Unicode字符串。
例如,将Unicode字符串“Hello World”转换为ANSI格式。
在此示例中,ASCII字符集不包括特殊字符或扩展字符集,因此,直接使用左到右转换将字符截取即可。
Unicode字符串:H e l l o W o r l dANSI字符串:H e l l o W o r l d2、使用API转换许多编程语言提供了API(应用程序接口)来支持Unicode和ANSI之间的相互转换。
在这种情况下,可以使用API转换在Unicode和ANSI之间进行转换,而不必考虑具体字符集的范围。
在C ++中,可以使用WideCharToMultiByte API将Unicode字符串转换为ANSI字符串。
【miscellaneous】【CC++语言】UTF8与GBK字符编码之间的相互转换
【miscellaneous】【CC++语⾔】UTF8与GBK字符编码之间的相互转换⼀预备知识1,字符:字符是抽象的最⼩⽂本单位。
它没有固定的形状(可能是⼀个字形),⽽且没有值。
“A”是⼀个字符,“€”(德国、法国和许多其他欧洲国家通⽤货币的标志)也是⼀个字符。
“中”“国”这是两个汉字字符。
字符仅仅代表⼀个符号,没有任何实际值的意义。
2,字符集:字符集是字符的集合。
例如,汉字字符是中国⼈最先发明的字符,在中⽂、⽇⽂、韩⽂和越南⽂的书写中使⽤。
这也说明了字符和字符集之间的关系,字符组成字符集(iso8859-1,GB2312/GBK,unicode)。
3,代码点:字符集中的每个字符都被分配到⼀个“代码点”。
每个代码点都有⼀个特定的唯⼀数值,称为标值。
该标量值通常⽤⼗六进制表⽰。
4,代码单元:在每种编码形式中,代码点被映射到⼀个或多个代码单元。
“代码单元”是各个编码⽅式中的单个单元。
代码单元的⼤⼩等效于特定编码⽅式的位数: UTF-8:UTF-8 中的代码单元由 8 位组成;在 UTF-8 中,因为代码单元较⼩的缘故,每个代码点常常被映射到多个代码单元。
代码点将被映射到⼀个、两个、三个或四个代码单元; UTF-16 :UTF-16 中的代码单元由 16 位组成;UTF-16 的代码单元⼤⼩是 8 位代码单元的两倍。
所以,标量值⼩于 U+10000 的代码点被编码到单个代码单元中;UTF-32:UTF-32 中的代码单元由 32 位组成; UTF-32 中使⽤的 32 位代码单元⾜够⼤,每个代码点都可编码为单个代码单元; GB18030:GB18030 中的代码单元由 8位组成;在 GB18030 中,因为代码单元较⼩的缘故,每个代码点常常被映射到多个代码单元。
代码点将被映射到⼀个、两个或四个代码单元。
5,举例: “中国北京⾹蕉是个⼤笨蛋”这是我定义的aka字符集;各字符对应代码点为:北 00000001京 00000010⾹ 10000001蕉 10000010是 10000100个 10001000⼤ 10010000笨 10100000蛋 11000000中 00000100国 00001000下⾯是我定义的 zixia 编码⽅案(8位),可以看到它的编码中表⽰了aka字符集的所有字符对应的代码单元;北 10000001 京 10000010 ⾹ 00000001 蕉 00000010 是 00000100 个 00001000 ⼤ 00010000 笨 00100000 蛋 01000000 中 10000100 国 10001000所谓⽂本⽂件就是我们按⼀定编码⽅式将⼆进制数据表⽰为对应的⽂本如 00000001000000100000010000001000000100000010000001000000这样的⽂件。
JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换
【适用范围】适用EOS所有版本,操作系统不限,数据库不限【问题描述和定位】JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换【解决方案和步骤】1、函数介绍在Java中,字符串用统一的Unicode编码,每个字符占用两个字节,与编码有关的两个主要函数为:1)将字符串用指定的编码集合解析成字节数组,完成Unicode-〉charsetName转换public byte[] getBytes(String charsetName) throws UnsupportedEncodingException2)将字节数组以指定的编码集合构造成字符串,完成charsetName-〉Unicode转换public String(byte[] bytes, String charsetName) throws UnsupportedEncodingException 2、Unicode与各编码之间的直接转换下面以对中文字符串"a中文"的编码转换为例,来了解各种编码之间的转换1)Unicode和GBK测试结果如下,每个汉字转换为两个字节,且是可逆的,即通过字节可以转换回字符串String-GBK〉ByteArray:\u0061\u4E2D\u6587(a中文)-〉0x61 0xD6 0xD0 0xCE 0xC4 ByteArray-GBK〉String:0x61 0xD6 0xD0 0xCE 0xC4-〉\u0061\u4E2D\u6587(a中文)2)Unicode和UTF-8测试结果如下,每个汉字转换为三个字节,且是可逆的,即通过字节可以转换回字符串String-UTF-8〉ByteArray:\u0061\u4E2D\u6587(a中文)-〉0x61 0xE4 0xB8 0xAD 0xE 6%0x96 0x87ByteArray-UTF-8〉String:0x61 0xE4 0xB8 0xAD 0xE6%0x96 0x87-〉\u0061\u4E2D\u6 587(a中文)3)Unicode和ISO-8859-1测试结果如下,当存在汉字时转换失败,非可逆,即通过字节不能再转换回字符串String-ISO-8859-1〉ByteArray:\u0061\u4E2D\u6587(a中文)-〉0x61 0x3F 0x3F ByteArray-ISO-8859-1〉String:0x61 0x3F 0x3F-〉\u0061\u003F\u003F(a??)3、Unicode与各编码之间的交叉转换在上面直接转换中,由字符串(Unicode)生成的字节数组,在构造回字符串时,使用的是正确的编码集合,如果使用的不是正确的编码集合会怎样呢?会正确构造吗?如果不能正确构造能有办法恢复吗?会信息丢失吗?下面我们就来看看这种情况,这部分可以说明在某些情况下虽然我们最终正确显示了结果,但其间仍然进行了不正确的转换。
VBA中的字符编码与转换技巧指南
VBA中的字符编码与转换技巧指南在VBA编程中,字符编码和转换是一个重要的主题。
理解字符编码和掌握字符转换技巧,对于处理文本数据、处理不同国家和语言的数据以及确保程序的稳定性至关重要。
在本文中,我们将探讨VBA中的字符编码和转换技巧,帮助您更好地处理文本数据。
首先,让我们了解字符编码。
字符编码是一种将字符转换为数字表示的方法,以便计算机能够识别和处理它们。
在VBA中,最常用的字符编码是ASCII码和Unicode编码。
ASCII码是一种最基本的字符编码系统,将字符映射到一个唯一的7位二进制值(0-127)。
在VBA中,我们可以使用`Asc`函数将字符转换为ASCII码,例如:```vbaDim character As StringDim asciiCode As Integercharacter = "A"asciiCode = Asc(character)```在这个例子中,我们将字符串"A"转换为ASCII码,并将结果存储在变量`asciiCode`中。
通过调用`Asc`函数,我们可以获得字符"A"对应的ASCII码值。
另外一个常用的字符编码是Unicode编码。
Unicode编码为每个字符分配了一个唯一的数字值,以便在不同国家和语言之间交换和处理文本数据。
Unicode编码通常使用多个字节来表示字符,其中最常见的是UTF-8编码。
在VBA中,我们可以使用`ChrW`函数将Unicode编码转换为字符,使用`StrConv`函数进行不同字符编码之间的转换。
例如,我们可以使用以下代码将Unicode编码转换为字符:```vbaDim unicodeCode As IntegerDim character As StringunicodeCode = 65character = ChrW(unicodeCode)```在这个例子中,我们将整数值65(对应字符“A”的Unicode编码)转换为字符,并将结果存储在变量`character`中。
sublimetext 编码转化
sublimetext 编码转化Sublime Text是一款功能强大的文本编辑器,被广泛用于代码编辑和开发。
在编码转化方面,Sublime T ext提供了多种功能和插件,可以帮助用户进行字符编码转换、格式转换以及乱码修复等操作。
在本篇文章中,我们将一步一步地回答有关Sublime Text编码转化的问题,并介绍一些常用的技巧和插件。
第一步:了解字符编码在开始介绍Sublime Text的编码转化功能之前,我们先来了解一下字符编码的概念。
字符编码是将字符映射为二进制数字的规则,用于在计算机中存储和显示文本。
常见的字符编码包括ASCII、UTF-8、UTF-16等。
不同的字符编码使用不同的编码规则,因此在进行编码转化时需要注意字符编码之间的兼容性和转化规则。
第二步:设置文件编码在Sublime Text中,可以通过以下步骤设置当前文件的编码:1. 打开Sublime Text编辑器;2. 点击菜单栏中的“File”选项;3. 在下拉菜单中选择“Reopen with Encoding”;4. 在弹出的对话框中,选择所需的编码格式。
通过以上步骤,我们可以改变文件的编码格式,从而确保正确地显示和保存文本内容。
第三步:手动进行字符编码转换Sublime Text提供了一些基本的字符编码转换功能,可以帮助用户快速进行编码转换。
以下是一些常见的字符编码转换操作:1. 转换为UTF-8编码:- 打开需要转换的文件;- 点击菜单栏中的“File”选项;- 选择“Save with Encoding”;- 在下拉菜单中选择“UTF-8”编码;- 保存文件。
2. 转换为其他编码格式:- 打开需要转换的文件;- 点击菜单栏中的“File”选项;- 选择“Save with Encoding”;- 在下拉菜单中选择目标编码格式;- 保存文件。
通过以上步骤,我们可以手动将文件从一种编码转换为另一种编码,实现不同编码格式之间的相互转换。
Unicode、UTF-8与GB2312等编码之间是如何转换的
Unicode、UTF-8与GB2312等编码之间是如何转换的字符编码是运算机技术的基石,想要熟练使用运算机,就必须明白得字符编码的知识。
不注意的人可能对那个不在意,但这些名词有时候实在让人困惑,对想学习运算机知识的人来说,搞明白它也十分重要,我也是在学习中慢慢了解了一些这方面的知识。
1. ASCII码在运算机内部,所有的信息最终都表示为一个二进制的字符串。
每一个二进制位〔bit〕有0和1两种状态,因此八个二进制位就能够组合出256种状态,这被称为一个字节〔byte〕。
也确实是说,一个字节一共能够用来表示256种不同的状态,每一个状态对应一个符号,确实是256个符号,从0000000到11111111。
上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。
这被称为ASCII码,一直沿用至今。
ASCII码一共规定了128个字符的编码,比如空格〝SPACE〞是32〔十进制的32,用二进制表示确实是00100000〕,大写的字母A是65〔二进制01000001〕。
这128个符号〔包括32个不能打印出来的操纵符号〕,只占用了一个字节的后面7位,最前面的1位统一规定为0。
下面是截图:具体的能够到那个网页上去查下:2、非ASCII编码英语用128个符号编码就够了,然而用来表示其他语言,128个符号是不够的。
比如,在法语中,字母上方有注音符号,它就无法用ASCII码表示。
因此,一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。
比如,法语中的é的编码为130〔二进制10000010〕。
如此一来,这些欧洲国家使用的编码体系,能够表示最多256个符号。
然而,那个地点又显现了新的问题。
不同的国家有不同的字母,因此,哪怕它们都使用256个符号的编码方式,代表的字母却不一样。
比如,130在法语编码中代表了é,在希伯来语编码中却代表了字母Gimel (ג),在俄语编码中又会代表另一个符号。
utf8编码互相转换 -回复
utf8编码互相转换-回复UTF-8编码是一种用来在计算机系统中表示字符的方法,它是一种全球通用的字符编码标准。
互相转换指的是在不同的编码方式之间转换字符的过程。
本文将分步骤回答互相转换的实现方法,并探讨其重要性和应用领域。
首先,我们需要了解UTF-8编码的基本原理。
UTF-8编码使用可变长度来表示字符,最常见的字符使用一个字节进行编码,而其他字符则可能使用两个、三个甚至四个字节进行编码。
此编码方式通过将字符映射到不同的二进制序列来表示不同的字符。
在进行编码和解码时,我们需要使用一些工具和技术。
下面是一些常见的方法:1. Python的`encode()`和`decode()`方法:Python提供了内置的字符串方法来实现编码和解码功能。
使用`encode()`方法可以将字符串转换为特定编码方式的字节序列,而使用`decode()`方法则可以将字节序列转换回字符串。
2. 在命令行中使用`iconv`命令:`iconv`是一个命令行工具,用于在各种编码和字符集之间进行转换。
通过输入`iconv -f <源编码> -t <目标编码> <文件>`命令,可以将一个文件从源编码转换为目标编码。
3. 在文本编辑器中使用转换工具:许多文本编辑器提供了内置的编码转换工具,可以方便地将文本从一种编码方式转换为另一种编码方式。
例如,使用记事本的"另存为"功能可以选择不同的编码方式保存文件。
互相转换的实现方法主要包括以下几个步骤:1. 确定源编码和目标编码:在进行字符编码转换之前,我们需要确定要从哪种编码方式转换为另一种编码方式。
通常情况下,我们会将源编码确定为已知的编码方式,而目标编码则是我们想要转换成的编码方式。
2. 选择合适的工具和技术:根据实际需求,选择合适的工具和技术来进行字符编码转换。
比如,如果需要将一个文件从一种编码方式转换为另一种编码方式,可以使用`iconv`命令;如果只需在编程环境中进行编码转换,可以使用Python的`encode()`和`decode()`方法。
Python字符编码转码之GBK,UTF8互转
Python字符编码转码之GBK,UTF8互转⼀、Python字符编码介绍1、须知:在python 2中默认编码是 ASCII,⽽在python 3中默认编码是 unicodeunicode 分为utf-32 (占4个字节),utf-16(占两个字节),utf-8(占1-4个字节),所以utf-16 是最常⽤的unicode版本,但是在⽂件⾥存的还是utf-8,因为utf8省空间在python 3,encode编码的同时会把stringl变成bytes类型,decode解码的同时会把bytes类型变成string类型在unicode编码中 1个中⽂字符=2个字节,1个英⽂字符 = 1个字节,切记:ASCII是不能存中⽂字符的utf-8是可变长字符编码,它是unicode的优化,所有的英⽂字符依然按ASCII形式存储,所有的中⽂字符统⼀是3个字节unicode包含了所有国家的字符编码,不同字符编码之间的转换都需要经过unicode的过程python本⾝的默认编码是utf-82、py2中的编码和转码的过程,如图:注:因为unicode是中间编码,任何字符编码之前的转换都必须解码成unicode,在编码成需要转的字符编码⼆、字符编码的转换1、py2字符编码的转换,代码如下:#! /usr/bin/env python# -*- coding:utf-8 -*-# __auther__ == luoahongs = "我是学员"#utf-8解码成unicode编码s_to_unicode = s.decode("utf-8")print("--------s_to_unicode-----")print(s_to_unicode)#然后unicode再编码成gbks_to_gbk = s_to_unicode.encode("gbk")print("-----s_to_gbk------")print(s_to_gbk)#gbk解码成unicode再编码成utf-8gbk_to_utf8 = s_to_gbk.decode("gbk").encode("utf-8")print("------gbk_to_utf8-----")print(gbk_to_utf8)#输出--------s_to_unicode-----我是学员-----s_to_gbk------�����˧------gbk_to_utf8-----我是学员注:以上这种情况适合字符是⾮unicode编码请款下,但是如果字符编码已经是Unicode的了咋办呢?⼴告回来,更加精彩。
字符编码与转换的原理与实现
字符编码与转换的原理与实现字符编码是将字符映射为二进制数据的过程,实现字符之间的转换和传输。
在计算机系统中,常用的字符编码包括ASCII码、Unicode和UTF-8等。
不同的字符编码体系有不同的原理和实现方式。
ASCII码(American Standard Code for Information Interchange)是一种最早的字符编码标准,使用7位二进制数表示128个字符,包括英文字母、数字、标点符号等。
ASCII码在计算机系统中广泛应用,但只能表示基本的英文字符,无法表示其他语言的文字。
Unicode是一种更加通用的字符编码标准,使用16位或32位二进制数表示几乎所有的文字和符号。
Unicode能够支持全球各种语言的文字,涵盖了现代世界上几乎所有的文字和符号。
但由于Unicode编码长度较长,不便于传输和存储。
为了解决Unicode编码长度过长的问题,人们发展了UTF-8编码(Unicode Transformation Format),它采用变长编码,能够有效地表示Unicode字符集,并且兼容ASCII码。
UTF-8编码根据不同的字符范围,采用1到4个字节表示一个字符,实现了对英文字符的高效表示,同时又能够支持全球多种语言。
字符编码转换的原理是通过查表来完成,根据不同的编码表将字符映射为对应的二进制数据。
在转换过程中,需要考虑字符集的兼容性和转换的正确性。
例如,将UTF-8编码的字符转换为Unicode编码,需要根据对应的转换规则来完成。
同时,还需要注意错误处理和异常情况的处理,确保转换过程的准确性和可靠性。
在实现字符编码转换过程中,通常会涉及到字符编码的检测、转换和重新编码等步骤。
检测过程可以通过查看字符编码标记来确定当前字符的编码方式,然后根据转换规则将其转换为目标编码。
如果需要重新编码,可以通过重新映射字符到目标编码,确保转换的正确性和完整性。
总的来说,字符编码与转换是计算机系统中非常重要的一部分,它涉及到字符表示、传输和存储等方面。
VBS字符串在不同编码之间的转换
VBS字符串在不同编码之间的转换vbscript, vbs 字符串在不同编码之间的转换,包括 ISO-8859-1,UTF-8,GBK,GB2312,GB18030之间的转换. Const adTypeBinary = 1Const adTypeText = 2' accept a string and convert it to Bytes array in the selected CharsetFunction StringToBytes(Str,Charset)Dim Stream : Set Stream = CreateObject("ADODB.Stream")Stream.Type = adTypeTextStream.Charset = CharsetStream.OpenStream.WriteText StrStream.FlushStream.Position = 0' rewind stream and read BytesStream.Type = adTypeBinaryStringToBytes= Stream.ReadStream.CloseSet Stream = NothingEnd Function' accept Bytes array and convert it to a string using the selected charsetFunction BytesToString(Bytes, Charset)Dim Stream : Set Stream = CreateObject("ADODB.Stream")Stream.Charset = CharsetStream.Type = adTypeBinaryStream.OpenStream.Write BytesStream.FlushStream.Position = 0' rewind stream and read textStream.Type = adTypeTextBytesToString= Stream.ReadTextStream.CloseSet Stream = NothingEnd Function' This will alter charset of a string from 1-byte charset(as windows-1252)' to another 1-byte charset(as windows-1251)Function AlterCharset(Str, FromCharset, ToCharset)Dim BytesBytes = StringToBytes(Str, FromCharset)AlterCharset = BytesToString(Bytes, ToCharset)End Function使⽤例⼦:dim s1,s2,FromCharset,ToCharsets1 = "我的字符串"FromCharset = "GB2312"ToCharset = "ISO-8859-1"s2 = AlterCharset(s1,FromCharset,ToCharset)。
详解C++中的ANSI与Unicode和UTF8三种字符编码基本原理与相互转换
详解C++中的ANSI与Unicode和UTF8三种字符编码基本原理与相互转换⽬录1、概述2、Visual Studio中的字符编码3、ANSI窄字节编码4、Unicode宽字节编码5、UTF8编码6、如何使⽤字符编码7、三种字符编码之间的相互转换(附源码)7.1、ANSI编码与Unicode编码之间的转换7.2、UTF8编码与Unicode编码之间的转换7.3、ANSI编码与UTF8编码之间的转换8、Windows系统对使⽤ANSI窄字节字符编码的程序的兼容9、字符编码导致程序启动失败的案例1、概述在⽇常的软件开发过程中,会时不时地去处理不同编码格式的字符串,特别是在处理⽂件路径的相关场景中,⽐如我们要通过路径去读写⽂件、通过路径去加载库⽂件等。
常见的字符编码格式有ANSI窄字节编码、Unicode宽字节编码以及UTF8可变长编码。
在Linux系统中,主要使⽤UTF8编码;在Windows系统中,既⽀持ANSI编码,也⽀持Unicode编码。
通⽤的⼤⼩写字母和数字则使⽤全球统⼀的固定编码,即ASCII码。
ANSI编码是各个国家不同语种下的字符编码,其字符的编码值只在该语种中有效,不是全球统⼀编码的,⽐如中⽂的GB2312编码就是简体中⽂的ANSI编码。
Unicode编码则是全球统⼀的双字节编码,所有语种的字符在⼀起统⼀的编码,每个字符的编码都是全球唯⼀的。
UTF8编码是⼀种可变长的宽字节编码,也是⼀种全球统⼀的字符编码。
本⽂将以WIndows中使⽤Visual Studio进⾏C++编程时需要处理的字符编码问题为切⼊点,详细讲解⼀下字符编码的相关内容。
2、Visual Studio中的字符编码在Visual Studio中编写C++代码时,该如何指定字符串的编码呢?其实很简单,使⽤双引号括住的字符串,使⽤的就是ANSI 窄字节编码;使⽤L+双引号括住的字符串,使⽤的就是Unicode宽字节编码,如下所⽰:char* pStr = "This is a Test."; // ANSI编码WCHAR* pWStr = L"This is a Test."; // Unicode宽字节编码我们也可以使⽤_T宏定义来指定字符串的编码格式:TCHAR* pStr = _T("This is a Test.");设置_T后,则由⼯程配置属性中的字符集设置来确定到底是使⽤哪种编码:如果选择多字节字符集,_T就被解释为双引号,即使⽤ANSI窄字节编码;如果选择Unicode字符集,_T就被解释为L,即使⽤Unicode宽字节编码。
各种字符编码间的转换方法:MultiByteToWideChar和MultiByteToWideChar(DOC)
MultiByteToWideChar和MultiByteToWideChar对各种字符编码间的转换函数原型:int WideCharToMultiByte(UINT CodePage,DWORD dwFlags,LPCWSTR lpWideCharStr,int cchWideChar,LPSTR lpMultiByteStr,int cbMultiByte,LPCSTR lpDefaultChar,LPBOOL lpUsedDefaultChar);此函数把宽字符串转换成指定的新的字符串,如ANSI,UTF8等,新字符串不必是多字节字符集。
参数:CodePage:指定要转换成的字符集代码页,它可以是任何已经安装的或系统自带的字符集,你也可以使用如下所示代码页之一。
参数说明:1、CodePage——指定要转换成的字符集代码页,它可以是任何已经安装的或系统自带的字符集,可选择以下代码页:CP_ACP //当前系统ANSI代码页CP_MACCP //当前系统Macintosh代码页CP_OEMCP //当前系统OEM代码页,一种原始设备制造商硬件扫描码CP_SYMBOL //Symbol代码页,用于Windows 2000及以后版本CP_THREAD_ACP //当前线程ANSI代码页,用于Windows 2000及以后版本CP_UTF7 //UTF-7,设置此值时lpDefaultChar和lpUsedDefaultChar都必须为NULLCP_UTF8 //UTF-8,设置此值时lpDefaultChar和lpUsedDefaultChar都必须为NULL用GetLocaleInfo 函数获取当前系统的代码页,936: 简体中文, 950: 繁体中文,949:韩文2、dwFlags——一般用0 就可以了指定是否转换成预制字符或合成的宽字符,对控制字符是否使用像形文字,以及怎样处理无效字符:MB_PRECOMPOSED //总是使用预制字符,即有单个预制字符时,就不会使用分解的基字符和不占空间字符。
编码转换原理
编码转换原理
编码转换是将一种编码格式转换成另一种编码格式的过程。
在计算机领域中,编码是将一种符号集合映射到另一种符号集合的过程。
在实际应用中,我们需要将不同的编码格式进行相互转换。
这种转换通常发生在数据传输、数据存储和文本处理等领域。
编码转换的原理主要涉及以下几个方面:
1. 编码规则
不同的编码格式有不同的编码规则。
例如,ASCII编码规定了128个字符的编码方式,而UTF-8编码则采用可变长度的编码方式。
在进行编码转换时,需要了解不同编码格式的规则。
2. 字符集
每种编码格式都有对应的字符集,字符集包含了所有可能出现的字符。
不同的编码格式使用的字符集有所不同。
因此,在进行编码转换时,需要将字符集进行相应的转换。
3. 字节序
字节序指的是在多字节编码格式中,多字节字符的字节顺序。
例如,在UTF-16编码中,一个字符需要用两个字节表示,那么这两个字节的排列顺序即为字节序。
在进行编码转换时,需要考虑不同编码格式的字节序。
编码转换的主要作用是使得数据能够在不同的系统和程序之间进行正常的传输和处理。
例如,在跨国公司的数据传输中,数据的编码格式可能存在差异,需要进行相应的编码转换;在网页设计
中,需要将HTML页面的编码格式转换成浏览器能够正常识别的编码格式。
总之,编码转换在计算机领域中具有重要的作用,了解编码转换的原理对于系统设计和数据处理非常重要。
常用编码方式及其格式转换
常用编码方式及其格式转换编码方法是在传输信息的过程中用来转换信息的格式,以使信息在不同的系统之间进行交换、传递和接收。
编码方式是计算机交互的重要基础,在计算机中,许多不同形式和格式的文本、图像、音频等数据都需要编码才能传送或者存储。
本文将介绍一些常用的编码方式及其格式转换。
第一种常用的编码方式是ASCII码,它是American Standard Code for Information Interchange的缩写,是计算机通信的一种重要基础。
ASCII码是由8位二进制数组成的,通常表示128个字符,这些字符包括大小写字母、数字、标点符号以及特殊字符。
ASCII码的特点是它只能表示英文字符,不能用来表示非英文字符,也就是说,它不能用来表示汉字、日文等。
同时,ASCII码中的字符只能是单字节,也就是说,一个字符占用一个字节。
另一种常用的编码方式是Unicode码,它是一种国际标准编码,它将字符编码为32位或64位的Unicode字符,其特点是编码表中可以表示约64000种字符,因此,不仅能表示英文字符,还能表示汉字、日文、韩文等多种语言的字符。
因此,在编码上,Unicode具有通用性,能够在不同的系统之间正确传输和显示,并具有良好的跨语言性能。
最后,一种常用的编码方式是UTF-8码,它是Unicode字符的一种变体,是一种可伸缩编码,它可以用一到四个字节表示一个字符,其编码思想是最多可以用4个字节存储每个Unicode字符,因此,UTF-8编码能够与所有Unicode字符交互,同时兼容ASCII码,支持多种语言字符,因此它是当今Internet上的一种普遍的字符编码方式。
不同的编码方式可以相互转换,其中最常用的转换是ASCII码转换成Unicode码,一般使用的方法是调用系统函数进行实现,也可以使用特殊的编码转换工具,比如Notepad++,这样可以更加快速地完成编码转换。
而UTF-8编码则可以不经过转换,直接从ASCII码中解码,也可以从Unicode码中编码。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
字符编码之间的相互转换 UTF8与GBKC++ UTF8编码转换 CChineseCode 一预备知识1,字符:字符是抽象的最小文本单位。
它没有固定的形状(可能是一个字形),而且没有值。
“A”是一个字符,“€”(德国、法国和许多其他欧洲国家通用货币的标志)也是一个字符。
“中”“国”这是两个汉字字符。
字符仅仅代表一个符号,没有任何实际值的意义。
2,字符集:字符集是字符的集合。
例如,汉字字符是中国人最先发明的字符,在中文、日文、韩文和越南文的书写中使用。
这也说明了字符和字符集之间的关系,字符组成字符集(iso8859-1,GB2312/GBK,unicode)。
3,代码点:字符集中的每个字符都被分配到一个“代码点”。
每个代码点都有一个特定的唯一数值,称为标值。
该标量值通常用十六进制表示。
4,代码单元:在每种编码形式中,代码点被映射到一个或多个代码单元。
“代码单元”是各个编码方式中的单个单元。
代码单元的大小等效于特定编码方式的位数: UTF-8 :UTF-8 中的代码单元由 8 位组成;在 UTF-8 中,因为代码单元较小的缘故,每个代码点常常被映射到多个代码单元。
代码点将被映射到一个、两个、三个或四个代码单元; UTF-16 :UTF-16 中的代码单元由 16 位组成;UTF-16 的代码单元大小是 8 位代码单元的两倍。
所以,标量值小于 U+10000 的代码点被编码到单个代码单元中; UTF-32:UTF-32 中的代码单元由 32 位组成; UTF-32 中使用的 32 位代码单元足够大,每个代码点都可编码为单个代码单元; GB18030:GB18030 中的代码单元由 8 位组成;在 GB18030 中,因为代码单元较小的缘故,每个代码点常常被映射到多个代码单元。
代码点将被映射到一个、两个或四个代码单元。
5,举例:“中国北京香蕉是个大笨蛋”这是我定义的aka字符集;各字符对应代码点为:北 00000001 京 00000010 香 10000001 蕉 10000010 是 10000100 个 10001000 大 10 010000 笨 10100000 蛋 11000000 中 00000100 国 00001000下面是我定义的 zixia 编码方案(8位),可以看到它的编码中表示了aka字符集的所有字符对应的代码单元;北 10000001 京 10000010 香 00000001 蕉 00000010 是 00000100 个 00001000 大 00010000 笨 00100000 蛋 01000000 中 10000100 国 10001000所谓文本文件就是我们按一定编码方式将二进制数据表示为对应的文本如 00000001000000100000010000001000000100000010000001000000这样的文件。
我用一个支持 zixia编码和aka字符集的记事本打开,它就按照编码方案显示为“香蕉是个大笨蛋”如果我把这些字符按照GBK另存一个文件,那么则肯定不是这个,而是 1100111111100011 1011110110110110 1100101011000111 1011100011110110 101101001 1110011 1011000110111111 1011010110110000 110100001010二,字符集1,常用字符集分类 ASCII及其扩展字符集作用:表语英语及西欧语言。
位数:ASCII是用7位表示的,能表示128个字符;其扩展使用8位表示,表示256个字符。
范围:ASCII从00到7F,扩展从00到FF。
ISO-8859-1字符集作用:扩展ASCII,表示西欧、希腊语等。
位数:8位,范围:从00到FF,兼容ASCII字符集。
GB2312字符集作用:国家简体中文字符集,兼容ASCII。
位数:使用2个字节表示,能表示7445个符号,包括6763个汉字,几乎覆盖所有高频率汉字。
范围:高字节从A1到F7, 低字节从A1到FE。
将高字节和低字节分别加上0XA0即可得到编码。
BIG5字符集作用:统一繁体字编码。
位数:使用2个字节表示,表示13053个汉字。
范围:高字节从A1到F9,低字节从40到7E,A1到FE。
GBK字符集作用:它是GB2312的扩展,加入对繁体字的支持,兼容GB2312。
位数:使用2个字节表示,可表示21886个字符。
范围:高字节从81到FE,低字节从40到FE。
GB18030字符集作用:它解决了中文、日文、朝鲜语等的编码,兼容GBK。
位数:它采用变字节表示(1 ASCII,2,4字节)。
可表示27484个文字。
范围:1字节从00到7F; 2字节高字节从81到FE,低字节从40到7E和80到FE;4字节第一三字节从81到FE,第二四字节从30到39。
UCS 字符集作用:国际标准 ISO 10646 定义了通用字符集 (Universal Character Set)。
它是与UNICODE同类的组织,UCS-2和UNICODE兼容。
位数:它有UCS-2和UCS-4两种格式,分别是2字节和4字节。
范围:目前,UCS-4只是在UCS-2前面加了0×0000。
UNICODE字符集作用:为世界650种语言进行统一编码,兼容ISO-8859-1。
位数:UNICODE字符集有多个编码方式,分别是UTF-8,UTF-16和UTF-32。
2 ,按所表示的文字分类语言字符集正式名称英语、西欧语 ASCII,ISO-8859-1 MBCS 多字节简体中文 GB2312 MBCS 多字节繁体中文 BIG5 MBCS 多字节简繁中文 GBK MBCS 多字节中文、日文及朝鲜语 GB18030 MBCS 多字节各国语言 UNICODE,UCS DBCS 宽字节三,编码 UTF-8:采用变长字节 (1 ASCII, 2 希腊字母, 3 汉字, 4 平面符号) 表示,网络传输, 即使错了一个字节,不影响其他字节,而双字节只要一个错了,其他也错了,具体如下:如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的字节数,其余各字节均以10开头。
UTF-8最多可用到6个字节。
UTF-16:采用2字节,Unicode中不同部分的字符都同样基于现有的标准。
这是为了便于转换。
从 0×0000到0×007F是ASCII字符,从0×0080到0×00FF是ISO-8859-1对ASCII的扩展。
希腊字母表使用从0×0370到 0×03FF 的代码,斯拉夫语使用从0×0400到0×04FF的代码,美国使用从0×0530到0×058F的代码,希伯来语使用从0×0590到0×05FF的代码。
中国、日本和韩国的象形文字(总称为CJK)占用了从0×3000到0×9FFF 的代码;由于0×00在c语言及操作系统文件名等中有特殊意义,故很多情况下需要UTF-8编码保存文本,去掉这个0×00。
举例如下: UTF-16: 0×0080 = 0000 0000 1000 0000 UTF-8: 0xC280 = 1100 0010 1000 0000 UTF-32:采用4字节。
优缺点 UTF-8、UTF-16和UTF-32都可以表示有效编码空间 (U+000000-U+10FFFF) 内的所有Unicode字符。
使用UTF-8编码时ASCII字符只占1个字节,存储效率比较高,适用于拉丁字符较多的场合以节省空间。
对于大多数非拉丁字符(如中文和日文)来说,UTF-16所需存储空间最小,每个字符只占2个字节。
Windows NT内核是Unicode(UTF-16),采用UTF-16编码在调用系统API时无需转换,处理速度也比较快。
采用UTF-16和UTF-32会有Big Endian 和Little Endian之分,而UTF-8则没有字节顺序问题,所以UTF-8适合传输和通信。
UTF-32采用4字节编码,一方面处理速度比较快,但另一方面也浪费了大量空间,影响传输速度,因而很少使用。
四,如何判断字符集 1,字节序首先说一下字节序对编码的影响,字节序分为Big Endian字节序和Little Endian字节序。
不同的处理器可能不一样。
所以,传输时需要告诉处理器当时的编码字节序。
对于前者而言,高位字节存在低地址,低字节存于高地址;后者相反。
例如,0X03AB, Big Endian字节序 0000: 0 3 0001: AB Little Endian字节序是 0000: AB 0001: 0 3 2,编码识别 UNICODE,根据前几个字节可以判断UNICODE字符集的各种编码,叫做Byte Order Mask方法BOM: UTF-8: EFBBBF (符合UTF-8格式,请看上面。
但没有含义在UCS 即UNICODE中) UTF-16 Big Endian:FEFF (没有含义在UCS-2中) UTF-16 Little Endian:FFFE (没有含义在UCS-2中) UTF-32 Big Endian:0000FEFF (没有含义在UCS-4中) UTF-32 Little Endian:FFFE0000 (没有含义在UCS-4中) GB2312:高字节和低字节的第1位都是1。
BIG5,GBK&GB18030:高字节的第1位为1。
操作系统有默认的编码,常为GBK,可以下载别的并升级。
通过判断高字节的第1位从而知道是ASCII或者汉字编码。
#include <stdio.h> #include <windows.h>//GBK编码转换到UTF8编码int GBKToUTF8(unsigned char * lpGBKStr,unsigned char * lpUTF8Str,int nUTF8StrLen) {wchar_t * lpUnicodeStr = NULL; int nRetLen = 0;if(!lpGBKStr) //如果GBK字符串为NULL则出错退出 return 0;nRetLen = ::MultiByteToWideChar(CP_ACP,0,(char *)lpGBKStr,-1,NULL,NULL); //获取转换到Unicode编码后所需要的字符空间长度lpUnicodeStr = new WCHAR[nRetLen + 1]; //为Unicode字符串空间nRetLen = ::MultiByteToWideChar(CP_ACP,0,(char *)lpGBKStr,-1,lpUnicodeStr,nRetLen); //转换到Unicode编码if(!nRetLen) //转换失败则出错退出 return 0;nRetLen = ::WideCharToMultiByte(CP_UTF8,0,lpUnicodeStr,-1,NULL,0,NULL,NULL); //获取转换到UTF8编码后所需要的字符空间长度if(!lpUTF8Str) //输出缓冲区为空则返回转换后需要的空间大小 {if(lpUnicodeStr) delete []lpUnicodeStr; return nRetLen; }if(nUTF8StrLen < nRetLen) //如果输出缓冲区长度不够则退出 {if(lpUnicodeStr)delete []lpUnicodeStr; return 0; }nRetLen = ::WideCharToMultiByte(CP_UTF8,0,lpUnicodeStr,-1,(char *)lpUTF8Str,nUTF8StrLen,N ULL,NULL); //转换到UTF8编码if(lpUnicodeStr)delete []lpUnicodeStr;return nRetLen; }//使用这两个函数的例子 int main() {char cGBKStr[] = "我是中国人!"; char * lpGBKStr = NULL; char * lpUTF8Str = NULL; FILE * fp = NULL; int nRetLen = 0;nRetLen = GBKToUTF8((unsigned char *) cGBKStr,NULL,NULL); printf("转换后的字符串需要的空间长度为:%d ",nRetLen); lpUTF8Str = new char[nRetLen + 1];nRetLen = GBKToUTF8((unsigned char *)cGBKStr,(unsigned char *)lpUTF8Str,nRetLen);if(nRetLen) {printf("GBKToUTF8转换成功!"); } else {printf("GBKToUTF8转换失败!"); goto Ret0; }fp = fopen("C:\\GBKtoUTF8.txt","wb"); //保存到文本文件 fwrite(lpUTF8Str,nRetLen,1,fp); fclose(fp);getchar(); //先去打开那个文本文件看看,单击记事本的“文件”-“另存为”菜单,在对话框中看到编码框变为了“UTF-8”说明转换成功了Ret0:{if(lpGBKStr)delete []lpGBKStr; if(lpUTF8Str)delete []lpUTF8Str; }return 0; }1 class CChineseCode23 { 45 public: 67 static void UTF_8ToUnicode(wchar_t* pOut,char *pText); // 把UTF-8转换成Unicode 8 9 static void UnicodeToUTF_8(char* pOut,wchar_t* pText); //Unicode 转换成UTF-8 10 11 static void UnicodeToGB2312(char* pOut,wchar_t uData); // 把Unicode 转换成 GB2312 1213 static void Gb2312ToUnicode(wchar_t* pOut,char *gbBuffer);// GB2312 转换成 Unicode 1415 static void GB2312ToUTF_8(string& pOut,char *pText, int pLen);//GB2312 转为 UTF-8 1617 static void UTF_8ToGB2312(string &pOut, char *pText, int pLen);//UTF-8 转为 GB2312 18 19 }; 2021 类实现 2223 void CChineseCode::UTF_8ToUnicode(wchar_t* pOut,char *pText) 24 25 { 2627 char* uchar = (char *)pOut; 2829 uchar[1] = ((pText[0] & 0x0F) << 4) + ((pText[1] >> 2) & 0x0F); 3031 uchar[0] = ((pText[1] & 0x03) << 6) + (pText[2] & 0x3F); 3233 return; 34 35 } 3637 void CChineseCode::UnicodeToUTF_8(char* pOut,wchar_t* pText) 38 39 { 4041 // 注意 WCHAR高低字的顺序,低字节在前,高字节在后 4243 char* pchar = (char *)pText; 4445 pOut[0] = (0xE0 | ((pchar[1] & 0xF0) >> 4)); 4647 pOut[1] = (0x80 | ((pchar[1] & 0x0F) << 2)) + ((pchar[0] & 0xC0) >> 6); 4849 pOut[2] = (0x80 | (pchar[0] & 0x3F)); 5051 return; 52 53 } 5455 void CChineseCode::UnicodeToGB2312(char* pOut,wchar_t uData) 56 57 { 5859 WideCharToMultiByte(CP_ACP,NULL,&uData,1,pOut,sizeof(wchar_t),NULL,NULL); 6061 return; 6263 } 6465 void CChineseCode::Gb2312ToUnicode(wchar_t* pOut,char *gbBuffer) 6667 { 6869 ::MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,gbBuffer,2,pOut,1); 7071 return ; 72 73 } 7475 void CChineseCode::GB2312ToUTF_8(string& pOut,char *pText, int pLen) 76 77 { 7879 char buf[4]; 8081 int nLength = pLen* 3; 8283 char* rst = new char[nLength]; 8485 memset(buf,0,4); 8687 memset(rst,0,nLength); 8889 int i = 0; 9091 int j = 0; 9293 while(i < pLen) 9495 { 9697 //如果是英文直接复制就可以 9899 if( *(pText + i) >= 0) 100101 { 102103 rst[j++] = pText[i++]; 104105 } 106107 else 108109 {110111 wchar_t pbuffer; 112113 Gb2312ToUnicode(&pbuffer,pText+i); 114115 UnicodeToUTF_8(buf,&pbuffer); 116117 unsigned short int tmp = 0; 118119 tmp = rst[j] = buf[0]; 120121 tmp = rst[j+1] = buf[1]; 122123 tmp = rst[j+2] = buf[2]; 124125 j += 3; 126127 i += 2; 128129 } 130131 } 132133 rst[j] = ''; 134135 //返回结果 136137 pOut = rst; 138139 delete []rst; 140141 return; 142 143 } 144145 void CChineseCode::UTF_8ToGB2312(string &pOut, char *pText, int pLen) 146 147 { 148 149 char * newBuf = new char[pLen]; 150151 char Ctemp[4]; 152153 memset(Ctemp,0,4);154155 int i =0; 156157 int j = 0; 158159 while(i < pLen) 160161 { 162163 if(pText > 0) 164165 { 166167 newBuf[j++] = pText[i++]; 168169 } 170171 else 172173 { 174175 WCHAR Wtemp; 176177 UTF_8ToUnicode(&Wtemp,pText + i); 178179 UnicodeToGB2312(Ctemp,Wtemp); 180181 newBuf[j] = Ctemp[0]; 182183 newBuf[j + 1] = Ctemp[1]; 184185 i += 3; 186187 j += 2; 188189 } 190191 } 192193 newBuf[j] = ''; 194195 pOut = newBuf; 196197 delete []newBuf;198199 return;200201 }1、将GBK转换成UTF8string GBKToUTF8(const std::string& strGBK) { string strOutUTF8 = ""; WCHAR * str1;int n = MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, NULL, 0); str1 = new WCHAR[n]; MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, str1, n); n = WideCharToMultiByte(CP_UTF8, 0, str1, -1, NULL, 0, NULL, NULL); char * str2 = new char[n];WideCharToMultiByte(CP_UTF8, 0, str1, -1, str2, n, NULL, NULL); strOutUTF8 = str2; delete[]str1; str1 = NULL; delete[]str2;str2 = NULL; return strOutUTF8; }Wi d e C h a r To M u l t i B y t e把U N I C O D E转换成A S C I I码。