GBK转UTF-8

sunh_li 2010-12-02 10:04:19
最近在学习字符编码,网上很多在讨论GBK转UTF-8,我就是不知道这个过程到底是什么转的。下面是我在网上看到的帖子不晓得这样转对不对;

首先“三只小熊”的 GBK 编码为:C8FD D6BB D0A1 D0DC

拆成字节为:C8 FD D6 BB D0 A1 D0 DC

根据 Unicode 与 UTF-8 编码转换规则:

Java code

Unicode Code UTF-8 Code
0000~007F 0xxxxxxx
0080~07FF 110xxxxx 10xxxxxx
0800~FFFF 1110xxxx 10xxxxxx 10xxxxxx
10000~10FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx



先从第一个字节 C8 开始看,C8 只能匹配第二行的转换,也就是采用两个字节,
这时第一个字节匹配成功,再匹配后一个字节 FD,规范要求的第二个字节是
10xxxxxx 因此 C8 FD 转换失败,C8 这时采用 UTF-8 的缺失字符 EF BF BD 即
Unicode 的 U+FFFD 来替换,在我们的平台上显示为 ? 了。

要是这样转换的话,所有的汉字都会按照第二行( 0080~07FF 110xxxxx 10xxxxxx)的转换,那不是有很多汉字没法转吗.
...全文
377 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
GBK 是无法直接转成 UTF-8 编码的,这需要一张字符映射表。

JRE 中就有这种表,不过不是 GBK 与 UTF-8 的直接映射,而是通过 Unicode 编码进行的,转换过程非常复杂,不了解的话也不大碍。

只需要搞清楚“三只小熊”的问题为什么是不成立的,搞清楚这个对编码知识会有更高层次地了解。
  • 打赏
  • 举报
回复
你引用的这些是我在下面这个帖子中的回复,请看原帖 11 楼的回复:

http://topic.csdn.net/u/20080623/16/e0f44f00-eaf9-4d38-b325-a3cc443f2ec9.html
workHq2010 2010-12-03
  • 打赏
  • 举报
回复
String str = new String("utf-8","gbk","sssss");
Jlins 2010-12-03
  • 打赏
  • 举报
回复
utf-8 2位
gbk 3位

不通过映射表 没办法转
zn85600301 2010-12-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bao110908 的回复:]

你引用的这些是我在下面这个帖子中的回复,请看原帖 11 楼的回复:

http://topic.csdn.net/u/20080623/16/e0f44f00-eaf9-4d38-b325-a3cc443f2ec9.html
[/Quote]
一直都没注意内在的转化方式 受教了
penbol 2010-12-02
  • 打赏
  • 举报
回复
有必要这个处理吗?一般处理中文问题都是在所有的java文件写成UTF-8 如果是其他格式的话然后用filter 坐一下转码处理
public class FilerEncode implements Filter{

@Override
public void destroy() {
// TODO Auto-generated method stub

}

@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("UTF-8");
System.out.println("本次请求的参数有\n");
Enumeration<String> names = request.getParameterNames();
while(names.hasMoreElements()){
String p_name=names.nextElement();
System.out.println("参数名:\t["+p_name+"]\t参数值是:\t["+request.getParameter(p_name)+"]");
}
System.out.println("===============================================");
chain.doFilter(request, response);
}

@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub

}

}

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧