怎样把UTF8编码转成GB2312编码?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎样把UTF8编码转成GB2312编码?相关的知识,希望对你有一定的参考价值。

我做的网站是UTF8编码的,可页面中需要连接一个官方网站进行信息查询,可是对方的网站是GB2312编码的,我用UTF8编码的页面去连接查询,查询关键字编码就不会被对方识别,造成无法正常查询,如果,把我的页面中的<meta http-equiv="content-type" content="text/html; charset=utf-8" />改成<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />的话,我的页面就无法正常显示,所以想问问大家有什么办法解决这个问题,是把我的页面改成gb2312的呢还是把提交的关键字字符改成UTF8的,要是改的话要怎么改?精通的人给指点一下.

把你的页面转换为gb2312最容易,最简单的方法你把你的网页用文本打开,另存为ansi格式,然后把你的页面的charset改为gb2312.很多文本编辑器,比如notepad++,提供更加方便的编码转换.

javascript提供了几个不同编码页面之间交互信息的函数,不过需要在发送的页面里编码,然后接收页面解码.如果那个官方主页是这种形式,你可以参考下javascript函数:escape(),encodeURI(),encodeURIComponent(),以及他们的解码函数.

我知道将字符串从gb2312转化为utf-8可以间接使用vbscript的chr()函数,不过反过来好像没有非常好的方法,并且vbscript不是所有浏览器通用.网上有一些utf-8转gb2312的算法,基本都是vbscript写的,你可以去百度查查"utf-8转gb2312".

还有一个ado的控件,叫做ado stream,它可以把字符串在任意两种编码间转换.不过遗憾的要在客户端使用它需要创建ActiveX控件.基本上是浏览器都会拦截下这个请求.所以只能放在服务端使用,而发送一个URL请求还要返回服务器处理,显然是种浪费.

我也是初学,就知道这么多了,希望能对你有点用处.
参考技术A 1.用dreamweaver打开要修改的网页。
2.ctrl+j会淡出页面属性
3.在
分类
里面选择
标题\编码
里面会有一个关于编码的下拉列表,选择你想要的gb2312就可以了!
参考技术B 用文本文档打开 另存为。。可以选择保存编码的 在文件类型的下面。。。
然后

<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />本回答被提问者采纳
参考技术C 把查询关键字转换成gb2312再传过去

文件的编码是一个怎样的机制

比如我在mac上有个f.txt文件,系统是utf-8编码其中有数据 "\xE6\x97\A5"——在utf-8编码下为汉字"日"

那么我用ultraedit将f.txt另存为以下几个文件:

  1. f1.txt文件其实际存储的内容为"\xE6\x97\A5",让ultraedit将其解释为是gb18030编码,那么在ultraedit界面显示为乱码。之后另存为gb18030编码的文件,在mac系统打开却是utf-8,显示正常的。

  2. f2.txt文件实际存储内容为"\xE6\x97\A5",解释为utf-8,那么显示为"日"

  3. f3.txt文件直接另存为gb18030编码,那么ultraedit会自动改变编码 即把"\xE6\x97\A5"变为"\xC8\xD5"。之后vim打开文件调用ascii编码解释。

问题来了,
既然实际存储数据是"\xE6\x97\A5",那我的编辑器凭什么解释为utf-8编码呢?我想得到GBK解释的乱码怎么办?
是在文档的二进制头部加入某种标记吗,如果是,这种标记该如何查看?
是在编辑器端进行基于编码的语义分析吗?

1

就拿 vim 来说吧

一个文本文件,vim 打开的时候按某种编码A打开,转换成某种编码B,然后保存的时候转换成另一种编码C,其他文本编辑器类似,可能没有vim这么可以设置和自动完成。编码B:对于整个文件没有影响,只是事关显示的,就是vim与操作系统交互时候使用的编码。

编码A:使用 set fileencodings=ucs-bom,utf-8,gbk,cp936,latin-1设置。vim 按照设置的顺序检查检测文件的编码。因为某些编码里不存在某些二进制序列的组合,所以如果检测到就认为不是这种编码,检查下一种编码,否则就认为是这一种。因为latin-1可以出现任何二进制序列的组合,所以如果放到第一个,那么将永远以latin-1显示。

在一般的二进制文件里是不存在字符编码的标记的。但是Unicode里面有个特殊叫做零宽度空格(\FE\FF)而\FF\FE是不存在的编码,所以在Unicode的标准里可以人为的在开始加入这个字符(这个字符在任何字体下都是没有宽度的,在中文字符里面没有任何的效果跟没有一样,是为了照顾东南亚某些语言的显示而设置的)。这样就便于文本编辑器检查字符和字节顺序,但是在代码里include这种文件经常会出问题(这可是个大坑,编译器会认为这是一个非法字符,可是你又看不到)。

编码Bset fileencoding=utf-8,保存时候使用的编码,保存的时候自动转换为另一种编码。但是如果一开始打开的时候就识别错了编码,再转换的时候一个不存在的字符也是不会完转换的。

所以 f1.txt 另存为 gp18030 可能不会进行编码的转换。

”问题来了,我想要得到实际存储数据是"\xE6\x97\A5",但是用gb18030编码解释,该如何做?“ 这个是什么意思?

 

2

 

文件编码就是实际以何种方式存储的代码规定,首先就回答你的问题,UTF8编码中是\xE6\x97\A5,你就不可能说采用GB18030编码结果还为\xE6\x97\A5字。

编辑器识别文本文件编码有不同的方式,有的文件编码带有Magic头,可以直接识别其前几个字节来完成,不过大部分文本文件不带有此类识别码,完全靠编辑器通过上下文和使用者的语言环境进行猜测。

以上是关于怎样把UTF8编码转成GB2312编码?的主要内容,如果未能解决你的问题,请参考以下文章

怎样把utf-8编码网页 转换为gb2312

vbscript中怎样把gb2312转换为UTF-8编码?

c#字符串转成utf8的问题

URL地址中如果有中文,会转成%的格式,如百度,会转为%B0%D9%B6%C8,请问这是啥技术,或啥编码?

java怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串

C语言UTF8要怎样转gb2312