如有多个网站,它们页面的编码不一样,有些是 UTF-8 编码,有些是 GB2312 编码。
要发评论到一个共同的页面,这时如果双方的编码不一样,那么中文字就成乱码了。
可以先把数据转成URL编码格式,再发送。还要指定编码,这样接收时才能对应解码。
URL编码格式,如“汉”字:
GB2312编码:BABA URL格式:%BA%BA
UTF-8 编码:E6B189 URL格式:%E6%B1%89
就是在每个字节编码前加个百分号。数字、字母不变,空格用加号代替。
页面是GB2312编码,发表代码:
1) 传送UTF-8编码
<script language="JavaScript">
function OnSubmit()
{
var obj = document.getElementById('Content');
var obj2 = document.getElementById('Content2');
obj.value = encodeURI(obj2.value); // 返回 UTF-8 编码 URI 的字符串
return true;
}
</script>
<form method="post" action="http://www.utf8.com/post_save.aspx" onsubmit="return OnSubmit();">
<textarea name="Content2" rows="10" cols="60"></textarea>
<textarea name="Content" rows="10" cols="60" style="display:none"></textarea>
<input type="hidden" name="Charset" value="UTF-8">
<input type="submit" value="提交" />
</form>
2) 传送GB2312编码
<script language="JavaScript">
function OnSubmit()
{
var obj = document.getElementById('Content');
var obj2 = document.getElementById('Content2');
obj.value = UrlEncode(obj2.value);
return true;
}
function UrlEncode(str)
{
var r = '';
var strSpecial = '!"#$%&\'()*+,/:;<=>?[]^`{|}~%';
for(var i = 0; i < str.length; i++)
{
var chr = str.charAt(i);
var cHex = GetHexGB2312(chr); // 返回字符的 GB2312 编码的十六进制值。JavaScript 可以获取字符的 Unicode 编码;VBScript 可以获取字符的 GB2312 编码。
// 开始转成编码的URL格式
if(parseInt('0x' + cHex) > 0x7f) // 大于 126
{
r += '%' + cHex.slice(0, 2) + '%' + cHex.slice(-2);
}
else // ASCII 中的字符,如字母、数字、符号等。
{
if(chr == ' ')
r += '+';
else if(strSpecial.indexOf(chr) != -1)
r += '%' + cHex;
else
r += chr;
}
}
return r;
}
</script>
<script language="VBScript">
<!--
Function GetHexGB2312(s)
GetHexGB2312 = hex(asc(s))
End Function
//-->
</script>
<form method="post" action="http://www.utf8.com/post_save.aspx" onsubmit="return OnSubmit();">
<textarea name="Content2" rows="10" cols="60"></textarea>
<textarea name="Content" rows="10" cols="60" style="display:none"></textarea>
<input type="hidden" name="Charset" value="GB2312">
<input type="submit" value="提交" />
</form>
<%@ Page Language="C#" %>
<%@ Import Namespace="System" %>
<script language="C#" runat="server">
private System.Text.Encoding encodingUTF8 = System.Text.Encoding.GetEncoding("UTF-8");
private System.Text.Encoding encodingGB2312 = System.Text.Encoding.GetEncoding("GB2312");
public void Page_Load(object sender, System.EventArgs e)
{
string content = Request.Form["Content"].ToString();
string charset = Request.Form["Charset"].ToString(); // 内容的编码
if (charset == "GB2312")
{
content = System.Web.HttpUtility.UrlDecode(content, encodingGB2312);
}
else
{
content = System.Web.HttpUtility.UrlDecode(content, encodingUTF8);
}
Response.Write(content);
}
</script>



