首页 技术教程 实用代码 注册破解 正则表达式 网址导航 电子书籍

UTF-8,GBK,GB2312编码规则与检测

UTF8 是兼容 ascii 的,所以 0~127 就和 ascii 完全一致了。gbk 的第一字节是高位为 1 的,第 2 字节可能高位为 0 。这种情况一定是 gbk ,因为 UTF8 对 >127 的编码一定每个字节高位为 1 。另外,对于中文,UTF8 一定编码成 3 字节。(似乎亚洲文字都是,UTF8 中双字节好象只用于西方字符集),所以型如 110***** 10****** 的,我们一概看成 gbk/gb2312 编码。这就解决了“位”的问题。汉字以及汉字标点(包括日文汉字等),在 UTF8 中一定被编码成:1110**** 10****** 10******连续汉字数量不是 3 的倍数的 gb2312 编码的汉字字符串一定不会被误认为 UTF8 。用了一些gbk 扩展字,或是插入了一些 ascii 符号的字...
类别:其它 - 字符编码    查看:162    更新:2014-06-06

unicode与utf8编码的转换算法

Ansi,UTF8,Unicode,ASCII编码1. ASCII和Ansi编码 字符内码(charcter code)指的是用来代表字符的内码.读者在输入和存储文档时都要使用内码,内码分为 单字节内码 -- Single-Byte character sets (SBCS),可以支持256个字符编码. 双字节内码 -- Double-Byte character sets)(DBCS),可以支持65000个字符编码. 前者即为ASCII编码,后者对应ANSI. 至于简体中文编码GB2312,实际上它是ANSI的一个代码页9362. Unicode unicode 是一种编码表格,例如,给一个汉字规定一个代码。类似 GB2312-1980, GB18030等,只不过字集不同。 一个unicode码可能转成长度为一个BYTE,或两个,三个,四个BYTE的UTF...
类别:其它 - 字符编码    查看:157    更新:2014-06-01

UTF-8编码里边的no BOM和BOM

UTF-8 编码的文件可以分为no BOM 和 BOM两种格式何谓BOM? "EF BB BF" 这三个字节就叫BOM,BOM的全称叫做"Byte Order Mard".在utf-8文件中常用BOM来表明这个文件是UTF-8文件,而BOM的本意实在utf16中用来表示高低字节序列的。在字节流之前有BOM表示采用低字节序列(低字节在前面),而utf8不用考虑字节序列,所以其实有无BOM都可以。微软的记事本 Word 等只能正确打开含BOM的UTF8文件,然后UltraEdit却恰恰相反,回把BOMutf8文件 误认为ascii编码。UTF-8的BOM是EFBBBF,因为UE载入UTF-8文件会转成Utf16,上述的EFBBBF 在Utf16中是FFFE...
类别:其它 - 字符编码    查看:149    更新:2014-06-01

UTF-8字符集的基础知识

字符集简史在所有字符集中,最知名可能要数被称为ASCII的7位字符集了。它是美国信息交换标准委员会(American Standards Committee for Information Interchange)的缩写, 为美国英语通信所设计。它由128个字符组成,包括大小写字母、数字0-9、标点符号、非打印字符(换行符、制表符等4个)以及控制字符(退格、响铃等)组成。 但是,由于他是针对英语设计的,当处理带有音调标号(形如汉语的拼音)的欧洲文字时就会出现问题。因此,创建出了一些包括255个字符的由ASCII扩展的字符集。其中有一种通常被成为IBM字符集,它把值为128-255之间的字符用于画图和画线,以及一些特殊的欧洲字符。另一种8位字符集是ISO 8859-1 Lati...
类别:其它 - 字符编码    查看:159    更新:2014-06-01

一段把客户端的中文字串转换成UTF-8的代码

开发ASP.NET,我经常要在客户端的javascript代码中使用window.location='WebForm1.aspx?Param1=中文字串'来跳转页面,但在跳转之前必须要把中文字串转换成UTF-8的代码,否则如果中文字串中间存在空格之类的字符就会引起问题。 实际上IE 5.5+,Netscape 6+,Mozilla中已经有了转换函数,即encodeURIComponent,但对于低版本的浏览器则需要一下代码。/* ***************************** Most of this code was kindly ** provided to me by** Andrew Clover (and at doxdesk dot com)** http://and.doxdesk.com/ ;** in response to my plea in my blog at ** http://worldtimzone.com/blog/date/2002/09/24** It was unclear ...
类别:网页编程 - ASP.NET    查看:157    更新:2014-05-20

UTF-8转换成GB2312的全处理

主题:将UTF-8编码的字符串转化成GB2312的编码,没有对应编码的字符串转化为&#DEC; 的格式。如 회=>회 语言:PHP,Javascript 内容:浏览器用Javascript中encodeURI函数将字符串(包含非GB2312中字符)编码,GET请求到服务器,页面编码均为GB2312,服务器PHP脚本将请求数据转换成GB2312表示。 基础:   1. 单独使用iconv函数只能转换GB2312字符,外文字符无法转换   2. 没有现成的函数可以用   3. bindec()函数:将二进制格式的"01"字符串转换为十进制数   4. decbin()函数:将十进制数转换为二进制字符串,如decbin(224)="11100000"   思路:因为UT...
类别:网页编程 - PHP技术    查看:132    更新:2014-05-19

PHP实现gb2312、UTF-8等字符和unicode间的编码转换及PHP版unescape

<? /**  * 将字符串转换成unicode编码  *  * @param string $input  * @param string $input_charset  * @return string  */ function str_to_unicode($input, $input_charset = 'gbk'){  $input = iconv($input_charset, "gbk", $input);  preg_match_all("/[x80-xff]?./", $input, $ar);  $b = array_map('utf8_unicode_', $ar[0]);  $outstr = join("", $b);  return $outstr; } function utf8_unicode_($c, $input_charset = 'gbk'){  $c = iconv($input_charset, 'utf-8', $c);  return utf8_unicode($c); } // utf...
类别:网页编程 - PHP技术    查看:137    更新:2014-05-19

不用iconv库的gb2312与utf-8的互换函数

一份gb2312.txt(184799字节)确实显得太大了点,而且还要经unicode转换。这份对照表为51965字节,要小的多了。对于无法使用iconv函数库的场合还是很实用的。<?php//对照表的使用$filename = "gb2utf8.txt";$fp = fopen($filename,"r");while(! feof($fp)) {list($gb,$utf8) = fgetcsv($fp,10);$charset[$gb] = $utf8;}fclose($fp);//以上读取对照表到数组备用/** gb2312到utf-8 **/function gb2utf8($text, &$charset) {//提取文本中的成分,汉字为一个元素,连续的非汉字为一个元素preg_match_all("/(?:[x80-xff].)|[x01-x7f]+/",$text,$tmp);$tmp = $tmp[0];//分离出汉字$ar = array_intersect($tmp, array_keys($charset));//替换汉字...
类别:网页编程 - PHP技术    查看:117    更新:2014-05-19

PHP对GB编码动态转UTF-8几种方法评测

在《IP地址->地理位置转换的测评》一文中提到用ip2addr函数直接读取IP数据库文件是效率最高的,相比用MySQL数据库存储IP数据,用SQL查询是效率最低的。但是IP数据库文件QQWry.dat是GB2312编码的。现在我需要UTF-8编码的地理位置结果。如果用MySQL方法,可以在数据存入数据库时就转换为UTF-8编码,一劳永逸。但是QQWry.dat文件又无法修改,只能把ip2addr函数的输出结果再进行动态转换。动态转换GB->UTF-8编码至少有四种方法:用PHP的iconv扩展转换用PHP的mb_string扩展转换用对换表转换,对换表存储在MySQL数据库中用对换表转换,对换表存储在文本文件中前两种方法要服务器作了相应设置(编...
类别:网页编程 - PHP技术    查看:129    更新:2014-05-19

基于MySQL数据库的UTF8中文网站全文检索的实现

现在的互联网上,很多网站都提供了全文搜索功能,浏览者可以通过输入关键字或者是短语来搜索特定的资料。在PHP+MySQL构架的网站中,通常的做法是通过SELECT查询的Like语句来进行搜索,这一办法存在搜索不够精确、以及效率非常低下的缺点。比如对一个有十几万条记录数据表的TEXT字段进行LIKE操作,可能会花费上近10秒钟左右,这对网站的浏览者来说是一个非常糟糕的使用体验。如何在海量的数据中能够快速的进行全文检索呢?MySQL提供了一个全文索引功能,也就是把字段设置上FULLTEXT索引属性,然后通过SELECT的MATCH AGAINST语句进行查找。 我们开发的一个纯英文站点TouchUs - The Globa...
类别:数据库 - MySQL    查看:115    更新:2014-05-19

UTF-8到ACSII的转换(让自己的C++程序支持多语言)

我的思路是这样的:在配置文件(基本上使用XML格式)中采用UTF-8编码,这样世界上的任何文字就都可以显示了。但是如果直接将配置内容读出并显示,在你的C++程序里面肯定是乱码,那么怎么解决呢?步骤如下(直接看代码吧)char szUTF8 [] = {0xE4,0XBB,0XB7,0XE5,0X80,0XBC};//是汉语的价值两个字int nLen = MultiByteToWideChar( CP_UTF8, 0, szUTF8, -1, NULL, NULL );//得到UTF8编码的字符串长度,是2LPWSTR lpwsz = new WCHAR[nLen];MultiByteToWideChar( CP_UTF8, 0, szUTF8, -1, lpwsz, nLen );//转换的结果是UCS2格式的价值两个字int nLen1 = WideCharTo...
类别:程序开发 - C/C++    查看:117    更新:2014-05-19

在Java中将数据由UTF8转换成GB2312格式

UTF8转换成GB2312 当我们在基于HTTP协议的JSP或Servlet的应用中获取数据或发送请求时,JVM会把输送的数据编码成UTF8格式。如果我们直接从HTTP流中提取中文数据,提取的结果为“????”(可能更多问号),为转换成我们能够理解的中文字符,我们需要把UTF8转换成GB2312,借助ISO-8859-1标准编码能够轻易的实现,下面的代码实现了这一功能:  byte [] b;  String utf8_value;  utf8_value = request.getParameter("NAME");//从HTTP流中取"NAME"的UTF8数据  b = utf8_value.getBytes("8859_1"); //中间用ISO-8859-1过渡  String name = new ...
类别:程序开发 - JAVA    查看:106    更新:2014-05-13

MFC下Unicode到UTF-8格式的转换

UNICODE 通过用双字节来表示一个字符,从而在更大范围内将数字代码映射到多种语言的字符集。MFC 以宏的形式提供了将一般文本转换成 UNICODE 数据类型的途径。开发人员只需要稍微改变一下编写代码的习惯便可以轻松编写支持 UNICODE 的应用。定义部分:通用 多字节 宽字节_TCHAR/TCHAR char wchar_t_T 或_TEXT char 常量字符串 wchar_t 常量字符串 LLPTSTR char *(或win32下LPSTR) wchar_t *LPCTSTR const char * LPCSTR const wchar_t * 通用形式就是自动的判断当前是否定义了_UNICODE字符集,例 如果是的话typedef wchar_t TCHAR;不是的话typedef char TCHA...
类别:其它 - 字符编码    查看:193    更新:2014-05-09

Ansi,UTF8,Unicode,ASCII

1. ASCII和Ansi编码字符内码(charcter code)指的是用来代表字符的内码.读者在输入和存储文档时都要使用内码,内码分为 单字节内码 -- Single-Byte character sets (SBCS),可以支持256个字符编码. 双字节内码 -- Double-Byte character sets)(DBCS),可以支持65000个字符编码.前者即为ASCII编码,后者对应ANSI.至于简体中文编码GB2312,实际上它是ANSI的一个代码页9362. Unicode 如上,ANSI有很多代码页,使用不同代码页的内码无法在其他代码也正常显示,这就是为什么日文版/繁体中文版游戏无法在简体中文平台直接显示的原因.Unicode也是一种字符编码方法,不过它是由国际组织设计,可以容纳全世界所有语...
类别:其它 - 字符编码    查看:120    更新:2014-05-09

Unicode编码,简要解释UCS、UTF、BMP、BOM等名词

这是一篇程序员写给程序员的趣味读物。所谓趣味是指可以比较轻松地了解一些原来不清楚的概念,增进知识,类似于打RPG游戏的升级。整理这篇文章的动机是两个问题:问题一: 使用Windows记事本的“另存为”,可以在GBK、Unicode、Unicode big endian和UTF-8这几种编码方式间相互转换。同样是txt文件,Windows是怎样识别编码方式的呢?我很早前就发现Unicode、Unicode big endian和UTF-8编码的txt文件的开头会多出几个字节,分别是FF、FE(Unicode),FE、FF(Unicode big endian),EF、BB、BF(UTF-8)。但这些标记是基于什么标准呢?问题二: 最近在网上看到一个ConvertUTF.c,实现了UTF-32...
类别:其它 - 字符编码    查看:127    更新:2014-05-09

UTF-8是什么

UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到4个字节编码UNICODE字符。用在网页上可以同一页面显示中文简体繁体及其它语言(如日文,韩文)字符集简史在所有字符集中,最知名的可能要数被称为ASCII的7位字符集了。它是美国标准信息交换代码(American Standard Code for Information Interchange)的缩写, 为美国英语通信所设计。它由128个字符组成,包括大小写字母、数字0-9、标点符号、非打印字符(换行符、制表符等4个)以及控制字符(退格、响铃等)组成。但是,由于他是针对英语设计...
类别:其它 - 字符编码    查看:193    更新:2014-05-09