使用js将utf-8编码转换成bg2312编码

makani 2008-12-22 06:08:07
我有一个页面是utf8编码的,在这个页面需要提交请求到gb2312编码的一个页面,有谁知道怎么把utf-8编码的字符转换成gb2312,谢谢!
...全文
20953 20 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
YWQ1179050720 2011-09-04
  • 打赏
  • 举报
回复
makani 2009-01-21
  • 打赏
  • 举报
回复
谢谢了
makani 2009-01-12
  • 打赏
  • 举报
回复
我是在js中做的转换,麻烦有没有办法,简单点的,谢谢!
cuixiping 2009-01-12
  • 打赏
  • 举报
回复
我给你说了思路了,代码你自己去实现。[Quote=引用 14 楼 cuixiping 的回复:]
另辟蹊径的思路:【假设你要由A(utf-8)提交请求给B(gb2312)】
在A中暗含一个gb2312的 <iframe>(称为C),需要提交请求前,先用js将有关数据赋值给C,再由C提交请求给B。A到C的过程是在内存中以UNICODE无需转换,C和B的编码是相同的所以无需转换。该方法适用于的任何编码的页面之间,且适用于各种主流浏览器,通用。

楼主的function gb2312(key)只能在IE内核浏览器有效,对firefox,opera等无效,因为你是调用vbscript.
[/Quote]
chaorenwopashei 2008-12-29
  • 打赏
  • 举报
回复
需要写一个类用来转化编码问题,还有就是传递参数一定要用这个编码累
package com.johe.util;

import java.io.UnsupportedEncodingException;

import sun.misc.BASE64Decoder;

public class StringConvert {



public static String changToGBK(String str){
String result=null;
try {
//String [] strArray=str.split("/");
boolean b=false;
//for(int i=0;i<strArray.length;i++){
if(!str.matches("^[0-9a-zA-Z、.。?!……/\u4e00-\u9fa5]*$") ){
result= new String(str.getBytes("iso8859-1"),"gbk");
}

else{
result=str;
}
//}


} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}

public static void main(String [] args){
System.out.println(decodeBASE64(encodeBASE64("")));
}

public static String encodeBASE64(String s) {
if (s == null) return null;
try {
return (new sun.misc.BASE64Encoder()).encode( s.getBytes("gbk") );
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return s;
}

// 将 BASE64 编码的字符串 s 进行解码
public static String decodeBASE64(String s) {
if (s == null) return null;
BASE64Decoder decoder = new BASE64Decoder();
try {
byte[] b = decoder.decodeBuffer(s);
return new String(b);
} catch (Exception e) {
return null;
}
}



}

这个是一个把gb2312转化成GBk的;类
makani 2008-12-29
  • 打赏
  • 举报
回复
在firefox中是不能用,麻烦楼上能不能说 的清楚点,简单点的
cuixiping 2008-12-27
  • 打赏
  • 举报
回复
另辟蹊径的思路:【假设你要由A(utf-8)提交请求给B(gb2312)】
在A中暗含一个gb2312的<iframe>(称为C),需要提交请求前,先用js将有关数据赋值给C,再由C提交请求给B。A到C的过程是在内存中以UNICODE无需转换,C和B的编码是相同的所以无需转换。该方法适用于的任何编码的页面之间,且适用于各种主流浏览器,通用。

楼主的function gb2312(key)只能在IE内核浏览器有效,对firefox,opera等无效,因为你是调用vbscript.
makani 2008-12-26
  • 打赏
  • 举报
回复

嘿嘿,昨天不小心多点了几次,最后问题解决了却不让我回复了,只有等到今天回复了,我现在已经解决了,只需要调用下面这个方法就行了,代码量少了很多
function gb2312(key)
{
var r = "";
for(var i=0;i<key.length;i++)
{
var t = key.charCodeAt(i);
if(t>=0x4e00 || t==0x300A || t==0x300B)
{
try
{
execScript("ascCode=hex(asc(\""+key.charAt(i)+"\"))", "vbscript"); r += ascCode.replace(/(.{2})/g, "%$1"); }
catch(e)
{}
}
else{r += escape(key.charAt(i))}
}
return r;
}
这个方法来源与http://blog.csdn.net/wcfboy1/archive/2008/08/25/2825343.aspx
还是要谢谢你们,我明天来结贴
makani 2008-12-25
  • 打赏
  • 举报
回复
上面的方法我都试过了,还是不行,我是从一个网站提交到另一个网站,请求的页面是html页面utf-8编码的,接受处理请求的页面是asp页面gb2312编码的,escape方法我试过了,有没有解决的,谢谢,如果有遇到相同问题的,请写出详细的js转码,再次感谢!
wcwtitxu 2008-12-25
  • 打赏
  • 举报
回复
http://www.jb51.net/article/5466.htm
上面用的就是对照表, 虽然加了大量的信息, 但兼容性还是比较好.
----------------------



下面是用 VBScript 的例子, 局限IE
http://www.ialvin.cn/blog/article.asp?id=131

还有个利用 Flash 的例子, 要求 Flash8+
http://www.ialvin.cn/util/py.htm



你还是用 http://www.jb51.net/article/5466.htm 这个吧!
makani 2008-12-25
  • 打赏
  • 举报
回复
http://www.jb51.net/article/5466.htm,这个里面有一个方法解决了我的问题,但是这个数组太大了,严重影响了页面的加载速度,所以我想换个方法进行代码转换,谢谢大家了,有解决的请告诉我您的解决方法,如果能写出详细的方法更好,谢谢!
makani 2008-12-25
  • 打赏
  • 举报
回复
http://www.jb51.net/article/5466.htm,这个里面有一个方法解决了我的问题,但是这个数组太大了,严重影响了页面的加载速度,所以我想换个方法进行代码转换,谢谢大家了,有解决的请告诉我您的解决方法,如果能写出详细的方法更好,谢谢!
手写 2008-12-23
  • 打赏
  • 举报
回复
encodeURI
于娜 2008-12-23
  • 打赏
  • 举报
回复
多此一举,根本不用转换!

HTML表单自动将提交的内容格式化为Unicode
形如 %27%45%78
makani 2008-12-23
  • 打赏
  • 举报
回复
我要用js实现,是在html页面做,谢谢
wcwtitxu 2008-12-23
  • 打赏
  • 举报
回复
encodeURI, encodeURIComponent 是 UTF-8 的
escape 是 Unicode 的

楼主如果一定要在客户端 编 GB2312
常见有下面三个手段:
1 利用 VBScript (限 IE)
2 利用 Flash (限已装 FlashPlayer 插件)
3 利用 Unicode-GBK 对照表 (较好)
这三个百度一下可以找到很多

再提供一个思路就是:
用 iframe 包括一个 GB2312 页面
提交时让 iframe 中GB页的表单代为提交
紫色田园 2008-12-23
  • 打赏
  • 举报
回复
js对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent

1、 传递参数时需要使用encodeURIComponent,这样组合的url才不会被#等特殊字符截断。

例如:<script language="javascript">document.write('<a href="http://passport.baidu.com/?logout&aid=7&u='+encodeURIComponent("http://cang.baidu.com/bruce42")+'">退出</a>');</script>

2、 进行url跳转时可以整体使用encodeURI

例如:Location.href=encodeURI("http://cang.baidu.com/do/s?word=百度&ct=21");

3、 js使用数据时可以使用escape

[Huoho.Com编辑]
例如:搜藏中history纪录。

4、 escape对0-255以外的unicode值进行编码时输出%u****格式,其它情况下escape,encodeURI,encodeURIComponent编码结果相同。


最多使用的应为encodeURIComponent,它是将中文、韩文等特殊字符转换成utf-8格式的url编码,所以如果给后台传递参数需要使用encodeURIComponent时需要后台解码对utf-8支持(form中的编码方式和当前页面编码方式相同)

escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z

encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z

encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z
wcwtitxu 2008-12-22
  • 打赏
  • 举报
回复
GB页这样接收

<script language="JScript" runat="Server">
function decodeURL(x) { return decodeURIComponent(x); }
</script>
<%

Dim param
param = decodeURL(Server.URLEncode(Request.Form("param")))
Response.Write param

%>
shilc111 2008-12-22
  • 打赏
  • 举报
回复
这个你试试看,不知行不行啊
http://www.phpchina.cn/bbs/thread-39210-1-1.html

87,996

社区成员

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

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