关于utf-8编码,熟悉的进来给指导下!~急 utf8里中文应该大部分都是3字节啊 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 utf8里中文应该大部分都是3字节啊???...php??怎么转码的? 如果是utf-8的话,strlen('字')==3;怎么是等于4??? utf8_encode不能处理中文!utf8_encode(PHP 3 >= 3.0.6, PHP 4, PHP 5)utf8_encode -- 将 ISO-8859-1 编码的字符串转换为 UTF-8 编码 ——————描述string utf8_encode ( string data )该函数将 data 字符串转换为 UTF-8 编码,并返回编码后的字符串。UTF-8 是一种用于将宽字符值转换为字节流的 Unicode 的标准机制。UTF-8 对于纯 ASCII 字符来说是透明的,且是自同步的(也就是说这使得程序能够得知字符从字节流的何处开始),并可被普通字符串比较函数用以比较等操作。PHP 可将 UTF-8 编码为多达四个字节的字符,如: 表格 1. UTF-8 编码字节(bytes) 位(bits) 表 示 1 7 0bbbbbbb 2 11 110bbbbb 10bbbbbb 3 16 1110bbbb 10bbbbbb 10bbbbbb 4 21 11110bbb 10bbbbbb 10bbbbbb 10bbbbbb 每个 UTF-8 表示一个能被用以储存字符数据的位。 可使用iconv函数,参见http://cn.php.net/manual/zh/function.iconv.php 另外,iconv(input_charset,output_charset,str);这里的input_charset如何确定?iconv_get_encoding获得的3个参数全部都是iso-8859-1,但是实际上是gb2312(我用的editplus2编辑器,它的默认字符编码好像就是gb2312).那么我如何在程序中确定前面这个参数呢?如果需要限制编辑器那不是很惨? 用多字节处理函数库中的mb_detect_encoding,这个和iconv一样,需要服务器加载扩展才能支持http://cn.php.net/manual/zh/function.mb-detect-encoding.php 请看mb_convert_encoding的,这个需要mb_string库的支持<?php/* Convert internal character encoding to SJIS */$str = mb_convert_encoding($str, "SJIS");/* Convert EUC-JP to UTF-7 */$str = mb_convert_encoding($str, "UTF-7", "EUC-JP");/* Auto detect encoding from JIS, eucjp-win, sjis-win, then convert str to UCS-2LE */$str = mb_convert_encoding($str, "UCS-2LE", "JIS, eucjp-win, sjis-win");/* "auto" is expanded to "ASCII,JIS,UTF-8,EUC-JP,SJIS" */$str = mb_convert_encoding($str, "EUC-JP", "auto");?> 参见:http://community.csdn.net/Expert/TopicView1.asp?id=4175715http://community.csdn.net/Expert/TopicView.asp?id=4168183 嗯,明白不少,再问个问题哈,之前我用utf8_encode编码中文时得到的是4字节编码,我用php的utf8_decode解码输出正确中文,这个不难理解,传给java程序,它那边ISO-8859-1 => GBK(随便一种,只要浏览器支持的吧?),也能得到正常中文这是怎么回事啊 呵呵,研究了一下,应该是这样。utf8_encode是如手册所说转iso-8859-1到utf8用的,那么你用来转gbk编码汉字,比如,“我”字,它把它当作两个iso-8859-1的字符,chr(206)和chr(210),因为gbk汉字编码是两个>128的字节组成的。而这两个字符对应的utf8分别是2字节编码,所以你得到一个4字节编码,但是,其实它不是汉字‘我’的utf8编码(应为11100110 10001000 10010001,3字节),而是两个字符chr(206)和chr(210)的utf8编码(分别为11000011 10001110和 11000011 10010010 )当时php中用utf8_decode时,它再还原成chr(206),chr(210),而你输出这两个字符时,因为页面使用gbk编码,所以它们又合成了原来的汉字‘我’,你传给java后,java一样的过程,iso-8859-1=》gbk变成chr(206),chr(210),然后显示成‘我’根据这个判断,如果java中你使用其它编码,结果就会不对了,比如你可以试试iso-8859-1=>utf8,因为两个utf8编码的chr(206),chr(210)不能合并成一个‘我’ 如何用PHP代码控制网站注册会员可以浏览的网页 CRIPT_NAME和 REQUEST_URI有什么区别 如何在windows下让php后台运行 windows下通过bat执行php实现计划任务 如何管理好自己收藏和积累的代码 在PHP里面如何与用缓存的,举几个例子好吗?谢谢了 小辈有问题要问PHP达人,ASP的一段代码在PHP中如何实现. 这样写是引用还是复制.... 有关phpMyAdmin的运行问题! 想在进入网站和离开的时候个执行一个函数 关于项目中一个数据库时间问题 怎么让SESSION失效时自动转到其它页面??
怎么是等于4???
(PHP 3 >= 3.0.6, PHP 4, PHP 5)utf8_encode -- 将 ISO-8859-1 编码的字符串转换为 UTF-8 编码
——————
描述
string utf8_encode ( string data )
该函数将 data 字符串转换为 UTF-8 编码,并返回编码后的字符串。UTF-8 是一种用于将宽字符值转换为字节流的 Unicode 的标准机制。UTF-8 对于纯 ASCII 字符来说是透明的,且是自同步的(也就是说这使得程序能够得知字符从字节流的何处开始),并可被普通字符串比较函数用以比较等操作。PHP 可将 UTF-8 编码为多达四个字节的字符,如: 表格 1. UTF-8 编码字节(bytes) 位(bits) 表 示
1 7 0bbbbbbb
2 11 110bbbbb 10bbbbbb
3 16 1110bbbb 10bbbbbb 10bbbbbb
4 21 11110bbb 10bbbbbb 10bbbbbb 10bbbbbb
每个 UTF-8 表示一个能被用以储存字符数据的位。
http://cn.php.net/manual/zh/function.iconv.php
这里的input_charset如何确定?
iconv_get_encoding获得的3个参数全部都是iso-8859-1,但是实际上是gb2312(我用的editplus2编辑器,它的默认字符编码好像就是gb2312).
那么我如何在程序中确定前面这个参数呢?如果需要限制编辑器那不是很惨?
http://cn.php.net/manual/zh/function.mb-detect-encoding.php
<?php
/* Convert internal character encoding to SJIS */
$str = mb_convert_encoding($str, "SJIS");/* Convert EUC-JP to UTF-7 */
$str = mb_convert_encoding($str, "UTF-7", "EUC-JP");/* Auto detect encoding from JIS, eucjp-win, sjis-win, then convert str to UCS-2LE */
$str = mb_convert_encoding($str, "UCS-2LE", "JIS, eucjp-win, sjis-win");/* "auto" is expanded to "ASCII,JIS,UTF-8,EUC-JP,SJIS" */
$str = mb_convert_encoding($str, "EUC-JP", "auto");
?>
http://community.csdn.net/Expert/TopicView1.asp?id=4175715
http://community.csdn.net/Expert/TopicView.asp?id=4168183
再问个问题哈,
之前我用utf8_encode编码中文时得到的是4字节编码,我用php的utf8_decode解码输出正确中文,这个不难理解,
传给java程序,它那边ISO-8859-1 => GBK(随便一种,只要浏览器支持的吧?),也能得到正常中文这是怎么回事啊
utf8_encode是如手册所说转iso-8859-1到utf8用的,那么你用来转gbk编码汉字,
比如,“我”字,它把它当作两个iso-8859-1的字符,chr(206)和chr(210),因为gbk
汉字编码是两个>128的字节组成的。
而这两个字符对应的utf8分别是2字节编码,所以你得到一个4字节编码,但是,其实它
不是汉字‘我’的utf8编码(应为11100110 10001000 10010001,3字节),而是两个
字符chr(206)和chr(210)的utf8编码(分别为11000011 10001110和 11000011 10010010 )
当时php中用utf8_decode时,它再还原成chr(206),chr(210),而你输出这两个字符时,
因为页面使用gbk编码,所以它们又合成了原来的汉字‘我’,
你传给java后,java一样的过程,iso-8859-1=》gbk变成chr(206),chr(210),然后显示成‘我’
根据这个判断,如果java中你使用其它编码,结果就会不对了,比如你可以试试iso-8859-1=>utf8,
因为两个utf8编码的chr(206),chr(210)不能合并成一个‘我’