unicode

UNICODE字符集

和自甴很熟 提交于 2020-04-01 04:11:41
Unicode :宽字节字符集 1. 如何取得一个既包含单字节字符又包含双字节字符的字符串的字符个数? 可以调用Microsoft Visual C++的运行期库包含函数_mbslen来操作多字节(既包括单字节也包括双字节)字符串。 调用strlen函数,无法真正了解字符串中究竟有多少字符,它只能告诉你到达结尾的0之前有多少个字节。 2. 如何对DBCS(双字节字符集)字符串进行操作? 函数 描述 PTSTR CharNext ( LPCTSTR ); 返回字符串中下一个字符的地址 PTSTR CharPrev ( LPCTSTR, LPCTSTR ); 返回字符串中上一个字符的地址 BOOL IsDBCSLeadByte( BYTE ); 如果该字节是DBCS字符的第一个字节,则返回非0值 3. 为什么要使用Unicode? (1) 可以很容易地在不同语言之间进行数据交换。 (2) 使你能够分配支持所有语言的单个二进制.exe文件或DLL文件。 (3) 提高应用程序的运行效率。 Windows 2000是使用Unicode从头进行开发的,如果调用任何一个Windows函数并给它传递一个ANSI字符串,那么系统首先要将字符串转换成 Unicode,然后将Unicode字符串传递给操作系统。如果希望函数返回ANSI字符串,系统就会首先将Unicode字符串转换成ANSI字符串

绕死你不偿命的UNICODE、_UNICODE、__TEXT、__T、_T、_TEXT、TEXT宏

与世无争的帅哥 提交于 2020-03-31 08:31:37
最近在看一些关于VC++和MFC的书时,书上对字符串的处理一般都会使用 TEXT("a string") 的形式或者 _T("a string") 的形式,自己写程序时MFC自动生成的代码中也有类似的宏。作为菜鸟,不加思考地照搬书上的TEXT()或者_T()不是我的风格,喜欢追根究底的性格促使我决定弄懂这些宏。但如果我按照以往写文章的习惯,跟着我思考的顺序来写这篇随笔的话,那是倒叙,会很不好写,所以我就按弄懂之后的正常顺序来写吧,但这也让这篇随笔看起来有点说教,各位看客且请忍受一下,谢谢。 C语言发明时尚没有UNICODE这一说,那时候米国人只有ASCII,但随着计算机的进化,程序中需要出现其它国家语言的字符,如中文,这远不是ASCII所能表示的,所以就出现了UNICODE(想深入了解UNICODE的童鞋,请猛击 这里 ),于是C语言也新加了一个类型: wchar_t ,用于表示UNICODE字符,其定义为: #define unsigned short wchar_t ,说白了其实就是用16位双字节表示一个字符(ASCII用单字节表示一个字符)。 这样编写程序就出现了一个问题,我先定义了一个变量: char *str = "china"; 这当然没问题,但如果后来要把该字符串换成中文的,那就得换成 wchar_t *str = L"中国"; (顺便说一下,字符串前的L是告诉编译器

utf8字符集下的比较规则

有些话、适合烂在心里 提交于 2020-03-27 15:31:49
前言: 在MySQL中,比较常用的字符集是utf8和utf8mb4。这两个字符集是类似的,utf8是utf8mb3的别名,所以之后在MySQL中提到utf8就意味着使用1~3个字节来表示一个字符,如果大家有使用4字节编码一个字符的情况,比如存储一些emoji表情啥的,需要使用utf8mb4。其实每个字符集下对应着若干个比较规则(也可以翻译为排序规则或校对规则,英文是COLLATE),同一字符集下,使用不同的比较规则会影响字符字段的比较和排序。本文以utf8为例,介绍下常用的几个比较规则的不同。 1.utf8下比较规则概览 我们先查看下utf8字符集下支持的所有比较规则: mysql> SHOW COLLATION LIKE 'utf8\_%'; +--------------------------+---------+-----+---------+----------+---------+ | Collation | Charset | Id | Default | Compiled | Sortlen | +--------------------------+---------+-----+---------+----------+---------+ | utf8_general_ci | utf8 | 33 | Yes | Yes | 1 | | utf8_bin |

Unicode转码

本小妞迷上赌 提交于 2020-03-27 06:53:54
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><title> Unicode转码 </title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/><BASE onmouseover="window.status='IE->工具->Internet选项->高级->允许活动内容在我的计算机上的文件中运行';return true"><script language="javascript"><!-- function trim(text) { return text.replace(/(^\s*)|(\s*$)/g,""); } function puncode() { if(myForm.mySelect.selectedIndex==0) { var s=myForm.encoding.value; s=escape(trim(s)); s=s.replace(/\%/g,"\\"); s=s.replace(/\\5C/g,"\\"); s=s.replace(/\\0D\\0A/g,"\r\n"); myForm.reverse.value=s; }else{ var u=myForm

关于Python 中unicode 转码的问题

ⅰ亾dé卋堺 提交于 2020-03-27 06:53:29
Python 中urllib2.urlopen 中存在中文转码问题,解决方法如下: 1. import BeautifulSoup import chardet response =urllib2.urlopen('%s'%line) #response.decode('utf-8') #response = urllib2.urlopen('http://www.baidu.com/') html = response.read() pdb.set_trace() #print html.decode('big5').encode('utf8') urlcodestyle=chardet.detect(html) sourcehtml=html.decode('%s'%urlcodestyle['encoding']).encode('utf-8') 2.sourcehtml 的使用方法: import BeautifulSoup """ if 'encoding' in urlcodestyle: soup=BeautifulSoup(html,fromEncoding="%s"%urlcodestyle['encoding']) else : soup=BeautifulSoup(html,fromEncoding="gb18030") """

unicode 转码问题

只谈情不闲聊 提交于 2020-03-27 06:52:56
<script type= "text/javascript" > var GB2312UnicodeConverter = { ToUnicode: function (str) { return escape(str).toLocaleLowerCase().replace(/%u/gi, '\\u' ); } , ToGB2312: function (str) { return unescape(str.replace(/\\u/gi, '%u' )); } }; var str = '上海' , unicode; document.write(str + '<br/>' ); unicode = GB2312UnicodeConverter.ToUnicode(str); document.write( '汉字转换为Unicode代码:' + unicode + '<br/><br/>' ); document.write( 'Unicode代码转换为汉字:' + GB2312UnicodeConverter.ToGB2312(unicode)); </script> 来源: https://www.cnblogs.com/qqyuhaitao/p/4228760.html

Java的char是16位的unicode类型

守給你的承諾、 提交于 2020-03-26 09:51:31
Java的char是16位的unicode类型,中文也是,两个字节,但是如果用utf-8(一般系统默认)读取或者转换为字节数组,就会变成3个字节。 Unicode是字符集,UTF-8/UTF-16是编码规则,或者广义的Unicode就包括字符集和多种编码规则。也就是说字符集规定了每个字符的二进制代码,编码规则才规定了如何存储这些二进制代码。 然后utf-16有个大端序(Big Endian order)和小端序(Little Endian order)的问题(utf-8的更复杂,所以这也是最好不要在windows下编程的原因)。 在Java中,对于一个中文字符的char,getByte的结果,如果不指定编码规则,则 默认是UTF-8,一个中文3个字节 ,如果是 unicode或者utf-16,默认是4个字节,前两个字节0xFEFF表示大端序,0xFFEF表示小端序 ,如果 指定了utf-16be或者utf-16le,就是2个字节 , package IOTest; import javax.management.StandardEmitterMBean; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.nio.charset

python中遇到的错误

做~自己de王妃 提交于 2020-03-25 12:22:02
3 月,跳不动了?>>> “IndentationError”表示缩进错误,遇到的类型有下面几个: Indentation Error: expected an indented block Indentation Error: unexpected indent Indentation Error: unindent does not match any outer indentation level 解决的办法大都是在出现错误的那一行,按Tab或空格(但不能混用)键缩进即可。 “Index Error”表示索引错误,遇到的类型有如下: IndexError: array index out of range "KeyError:"使用dict[key]时出现的错误,出现这种情况,最好使用dict.get(key)来检查dict中是否含有目标值,如果返回none的话,就是没有目标键的值。 "TypeError"遇到的情况如下: TypeError:'unicode' object is not callable 出现这样的报错,是程序将字符串当作函数使用了。 “UnicodeEncodeError”说明编码有问题 UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1:

Unicode utf8等编码类型的原理

穿精又带淫゛_ 提交于 2020-03-25 11:48:07
3 月,跳不动了?>>> 1、ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte)。也就是说,一个字节一共可以用来表示256种不同的状态,每一个状态对应一个符号,就是256个符号,从0000000到11111111。 上个世纪60年代,美国制定了一套字符编码,对英语字符与二进制位之间的关系,做了统一规定。这被称为ASCII码,一直沿用至今。 ASCII码一共规定了128个字符的编码,比如空格“SPACE”是32(二进制00100000),大写的字母A是65(二进制01000001)。这128个符号(包括32个不能打印出来的控制符号),只占用了一个字节的后面7位,最前面的1位统一规定为0。 2、非ASCII编码 英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的。比如,在法语中,字母上方有注音符号,它就无法用ASCII码表示。于是,一些欧洲国家就决定,利用字节中闲置的最高位编入新的符号。比如,法语中的é的编码为130(二进制10000010)。这样一来,这些欧洲国家使用的编码体系,可以表示最多256个符号。 但是,这里又出现了新的问题。不同的国家有不同的字母,因此,哪怕它们都使用256个符号的编码方式,代表的字母却不一样

ASCII,ANSI,UNICODE,UTF-8,UNICOD BIG Endian 等字符编码问题

时光总嘲笑我的痴心妄想 提交于 2020-03-25 10:00:20
3 月,跳不动了?>>> 字符集简史: 在所有字符集中,最知名可能要数被称为ASCII的7位字符集了。它是美国信息交换标准委员会(American Standards Committee for Information Interchange)的缩写, 为美国英语通信所设计。它由128个字符组成,包括大小写字母、数字0-9、标点符号、非打印字符(换行符、制表符等4个)以及控制字符(退格、响铃等) 组成。 但是,由于他是针对英语设计的,当处理带有音调标号(形如汉语的拼音)的欧洲文字时就会出现问题。因此,创建出了一些包括255个字符的由ASCII扩展 的字符集。其中有一种通常被成为IBM字符集,它把值为128-255之间的字符用于画图和画线,以及一些特殊的欧洲字符。另一种8位字符集是ISO 8859-1 Latin 1,也简称为ISO Latin-1。它把位于128-255之间的字符用于拉丁字母表中特殊语言字符的编码,也因此而得名。 欧洲语言不是地球上的唯一语言,因此亚洲和非洲语言并不能被8位字符集所支持。仅汉语(或pictograms)字母表就有80000以上个字符。但是把 汉语、日语和越南语的一些相似的字符结合起来,在不同的语言里,使不同的字符代表不同的字,这样只用2个字节就可以编码地球上几乎所有地区的文字。因此, 创建了UNICODE编码。它通过增加一个高字节对ISO Latin