求utf8转gb2312方法

1212 2007-03-22 08:12:59
这段javascript内嵌到网页上,在网上找了很多utf8转gb2312方法都不行,我的数据是中英文结合,请大家给个方法,谢谢
...全文
2775 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
1212 2007-03-23
  • 打赏
  • 举报
回复
特别感谢你的帮助,我先用vbscript方案。
hbhbhbhbhb1021 2007-03-23
  • 打赏
  • 举报
回复
我也没测试过,因为很难整理出那么多汉字的数组,并且服务器端语言可以解决,以后有时间会找些资料写程序生成出来一个数组测试下,GB2312我没记错的话,大约是7000多字吧,放个二维数组用折半查找不会很慢的,直接循环估计就会挂了
1212 2007-03-23
  • 打赏
  • 举报
回复
今天算碰到javascript高手了
原来这样,对照表只要包括gb2312部分,一般不会太大吧?
能否帮忙给段代码,我试试效果如何
hbhbhbhbhb1021 2007-03-23
  • 打赏
  • 举报
回复
不行的,因为JS对中文的GB码支持不行,只能调VBSCRIPT来处理,除非加个对照表,不过那样的话,文件就大了.现在这样做很多浏览器也不兼容,很多浏览器不支持vbscript,如果可以这个需求最好拿到服务器端来做.
1212 2007-03-23
  • 打赏
  • 举报
回复
谢谢,学到了不少东西,原来是unicode

将你改过的函数放到*.js执行的。
执行时,提示下面出错:

<script language=vbscript>
function vb_str_to_gb(char)
vb_str_to_gb=hex(asc(char))
end function
</script>
<script language=javascript>


可不可以将:
result+=vb_str_to_gb(str.charAt(i));

直接改成如下语句形式:

result+=hex(asc(str.charAt(i)));

我这样改后,没有结果返回。
hbhbhbhbhb1021 2007-03-23
  • 打赏
  • 举报
回复
4字节的是unicode码,和你的那个编码只是把其中的几位舍去,变成固定字节来保存,有节省空间等优点
<script language=vbscript>
function vb_str_to_gb(char)
vb_str_to_gb=hex(asc(char))
end function
</script>
<script language=javascript>
function str_to_gb(str)
{
str=unescape(str)
var result = '';
var i;

for (i = 0; i < str.length; i++)
{
var c = str.charCodeAt(i);
var tmp = '';

if (c > 255)
{
result+=vb_str_to_gb(str.charAt(i));
}
else
{
result += str.charAt(i);
}
}
return result;
}
alert(str_to_gb("\u5929\u5916\u6C34\u706B"))
</script>
1212 2007-03-23
  • 打赏
  • 举报
回复
开始我搞错了,我准备截取网页输入的字符,转成GB2312,经过试验,发现输入的不是UTF8字符(虽然网页是UTF8)
就拿“天外水火 ”这4个字来说,输入后的十六进制是:
5929 5916 6C34 706B

这个是什么编码?我需要将其转成标准的GB2312,放到*.js执行。

function str_to_gb(str)
{
var result = '';
var i;

for (i = 0; i < str.length; i++)
{
var c = str.charCodeAt(i);
var tmp = '';

if (c > 255)
{


//execScript("result=result+hex(asc('"+str.charAt(i,1)+"'))","VBScript")
怎么将1楼的这句转到这个函数里执行?

}
else
{
result += str.charAt(i);
}
}
return result;
}

gzdiablo 2007-03-23
  • 打赏
  • 举报
回复
呵呵
1212 2007-03-22
  • 打赏
  • 举报
回复
另外,var str="\u5929\u5916\u6C34\u706B" 这个是什么编码?
1212 2007-03-22
  • 打赏
  • 举报
回复
也就是说写个函数utf8_to_gb()就行了,我到时直接调用iutf8_to_gb(nput.value);
1212 2007-03-22
  • 打赏
  • 举报
回复
非常感谢,测试正常

对javascript不懂,能否再帮忙完善一下,让其处理字符串呢?
编辑框输入中文后,结果放到input.value里,然后让程序对input.value再处理?
hbhbhbhbhb1021 2007-03-22
  • 打赏
  • 举报
回复
不好意思,看错了,是UTF8
<script language=javascript>
var str="%E5%A4%A9%E5%A4%96%E6%B0%B4%E7%81%AB"
str=decodeURI(str)
document.writeln(str)
var result=""
for(var i=0;i<str.length;i++)
{
execScript("result=result+hex(asc('"+str.charAt(i,1)+"'))","VBScript")
}
document.write(result)
</script>
1212 2007-03-22
  • 打赏
  • 举报
回复
感谢楼上的
这段代码好像不是将utf8转GB2312吧

运行你的程序,得到结果:天外水火 CCECCDE2CBAEBBF0

天外水火 的UTF8码是:E5A4A9 E5A496 E6B0B4 E781AB
hbhbhbhbhb1021 2007-03-22
  • 打赏
  • 举报
回复
<script language=javascript>
var str="\u5929\u5916\u6C34\u706B"
document.writeln(str)
var result=""
for(var i=0;i<str.length;i++)
{
execScript("result=result+hex(asc('"+str.charAt(i,1)+"'))","VBScript")
}
document.write(result)
</script>

87,919

社区成员

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

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