CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  PHP

关于utf-8编码,熟悉的进来给指导下!~急

楼主yh801216(艾奥利斯)2005-08-05 09:18:28 在 Web 开发 / PHP 提问

看了php手册,php得utf8_encode对中文是4字节编码,而java,windows等编码都采用3字节编码,java那边对于php这边的4字节编码可以解析,而php这边对于3字节的编码无法正确解析。。。怎么办?(必须用utf8编码交互的话) 问题点数:50、回复次数:15Top

1 楼helloyou0(你好!)回复于 2005-08-05 09:23:51 得分 0

utf8里中文应该大部分都是3字节啊Top

2 楼yh801216(艾奥利斯)回复于 2005-08-05 09:31:03 得分 0

utf8里中文应该大部分都是3字节啊???...php??怎么转码的?  
  Top

3 楼hjmsolar(孤舟蓑笠翁)回复于 2005-08-05 09:33:30 得分 0

如果是utf-8的话,strlen('字')==3;  
  怎么是等于4???Top

4 楼xuzuning(唠叨)回复于 2005-08-05 09:43:11 得分 10

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   表示一个能被用以储存字符数据的位。    
   
  Top

5 楼lm92()回复于 2005-08-05 09:53:49 得分 15

可使用iconv函数,参见  
  http://cn.php.net/manual/zh/function.iconv.phpTop

6 楼yh801216(艾奥利斯)回复于 2005-08-05 10:33:47 得分 0

谢谢,初步测试可以了。再看看Top

7 楼yh801216(艾奥利斯)回复于 2005-08-05 10:58:20 得分 0

另外,iconv(input_charset,output_charset,str);  
  这里的input_charset如何确定?  
  iconv_get_encoding获得的3个参数全部都是iso-8859-1,但是实际上是gb2312(我用的editplus2编辑器,它的默认字符编码好像就是gb2312).  
  那么我如何在程序中确定前面这个参数呢?如果需要限制编辑器那不是很惨?。。。Top

8 楼lm92()回复于 2005-08-05 11:09:57 得分 0

用多字节处理函数库中的mb_detect_encoding,这个和iconv一样,需要服务器加载扩展才能支持  
  http://cn.php.net/manual/zh/function.mb-detect-encoding.phpTop

9 楼gu1dai(异域苍穹.百年飞行)回复于 2005-08-05 12:15:14 得分 5

请看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");  
  ?>Top

10 楼netvt(唯她(为了泡老婆,努力学习LISP))回复于 2005-08-05 12:50:24 得分 10

参见:  
  http://community.csdn.net/Expert/TopicView1.asp?id=4175715  
  http://community.csdn.net/Expert/TopicView.asp?id=4168183Top

11 楼yh801216(艾奥利斯)回复于 2005-08-05 14:49:33 得分 0

嗯,明白不少,  
  再问个问题哈,  
  之前我用utf8_encode编码中文时得到的是4字节编码,我用php的utf8_decode解码输出正确中文,这个不难理解,  
  传给java程序,它那边ISO-8859-1   =>   GBK(随便一种,只要浏览器支持的吧?),也能得到正常中文。。。这是怎么回事啊。。。Top

12 楼helloyou0(你好!)回复于 2005-08-05 22:51:19 得分 10

呵呵,研究了一下,应该是这样。  
  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)不能合并成一个‘我’  
  Top

13 楼yh801216(艾奥利斯)回复于 2005-08-06 09:13:04 得分 0

嗯,谢谢!~Top

14 楼xylegend(pal)回复于 2005-08-06 19:30:30 得分 0

markTop

15 楼s_future()回复于 2006-01-15 14:34:42 得分 0

markTop

相关问题

  • 有谁熟悉Mp3的压缩编码?
  • 熟悉Visual Age的请进(非编码问题)
  • 有谁对 TrueSpeech 音频编码比较熟悉吗
  • 请问哪里有UTF的编码规则?
  • 谈谈Unicode编码,简要解释UCS、UTF、BMP、BOM等名词
  • 关于配置utf—8编码的问题
  • utf-8编码问题,求大家帮忙。。。。
  • php中用utf-8编码无法更改header的问题
  • C#编码标准 指导和最佳实践 技术专家的评析
  • 请问用UTF编码可以解决韩文、日文输入吗?

关键词

  • .net
  • 编码
  • 字符
  • php
  • 函数
  • 中文
  • 转换
  • utf8
  • bbbbbb
  • 字符串

得分解答快速导航

  • 帖主:yh801216
  • xuzuning
  • lm92
  • gu1dai
  • netvt
  • helloyou0

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo