utf8里中文应该大部分都是3字节啊
解决方案 »
- PHP执行SQL存储过程遇到错误,急!急!急!
- 奇怪,后台只登入一次,tmp文件夹里面的东西就自动不断的再增加,怎么会事呀?
- 【100分】怎么解决linux下面流媒体的盗链问题
- CSDN这个网站很慢,不知道大家有没有同感?是为什么呢
- 我下了一个phpMyAdmin 2.6.1 用不了
- 古怪的问题
- 推荐适合初学者看的php入门书籍
- 类似问卷的HTML中js获取了用户选择答案,如何传值到PHP
- 字段类型decimal(10,1),计算100.0+1.5=101.0,为什么?
- iis+php 上传文件大小显示ini里面已经进行了修改
- 关于项目中一个数据库时间问题
- 怎么让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)不能合并成一个‘我’