UTF-8转 GBK问题 如果 要转的字符串是 偶数就没问题,如果 是奇数最后一个字就会变成 问号 (“?”)网上搜了半天都是 JAVA 的解决方法。请问 .NET 该 怎么 正常转码? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 本帖最后由 net_lover 于 2012-06-13 14:54:23 编辑 转过啊,关键是你的内容真的是utf-8还是只是utf-8的url编码格式? 这么 说吧 。是一个 静态 的 页面 提交表单 然后 ASPX 页面 获取表单 内容 静态 页面 加了 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />aspx 页面 Request.Form[“”].ToString()得到的是乱码 经过 public string str(string form) { string u16s = Request.Form[form].ToString().Trim(); Encoding GBK = Encoding.GetEncoding("GBK"); Encoding utf8 = Encoding.UTF8; byte[] u16bytes = GBK.GetBytes(u16s); byte[] u8bytes = Encoding.Convert(utf8, GBK, u16bytes); string str = GBK.GetString(u8bytes); return str; }后得到 的 是正常的 汉字 。。但有个问题 如果 汉字的 个数 是 奇数 则 最后 一位 是 “?” 如果都是utf-8,其实不用任何转换都是可以的,web.config里面写<globalization requestEncoding="utf-8" responseEncoding="utf-8" />不要写gbk之类的 发邮箱,使用utf-8就可以了,不要使用gbk, 本帖最后由 net_lover 于 2012-06-13 15:55:24 编辑 主要是 发送表单的html页面不能动 ,那页面 是 UTF-8 的 ,但 我项目 配置文件里有 <globalization fileEncoding="gb2312" requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" /> 是 GBK 的 两个 我都 不能 改 所以 只能 把 获得 的 UTF-8 格式 的 字 转换成 GBK 。。现在的问题就是 ,转换 的时候 奇数 字符窜 最后一个 字符 就变成 ? 了原因是GBK编码是一个中文2个字节,而UTF-8编码是一个中文3个字节但是 GBK.GetString(u8bytes); 这个 方法 每次读取2个字进行转换。所以 奇数 字符串 会 剩下 一个字节 !所以 会出现 “?”但是 我不知道 该 用 什么方法 解决这问题 如果这2个地方你都不能改,你可以在Global里面写这样的代码public void Application_BeginRequest(object sender, EventArgs args){ Request.ContentEncoding = Encoding.GetEncoding("utf-8");}这样就可以正确接收到来自utf-8页面的内容了,无需再解码测试a.htm<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><head> <title></title></head><body><form method="post" action="a.aspx"><input name="content" /><input type="submit" /></form></body></html>a.aspx<%@ Page Language="C#" Debug="true" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><script runat="server"> protected void Page_Load(object sender, EventArgs e) { Response.Write(Request.Form["content"]); }</script><html xmlns="http://www.w3.org/1999/xhtml"><body> <form runat="server"></form></body></html>Global.asax<%@ Application Language="C#" %><script runat="server">public void Application_BeginRequest(object sender, EventArgs args){ Request.ContentEncoding = Encoding.GetEncoding("utf-8");}</script>需要注意的是,这个是对所有页面的,你可能需要判断页面url是不是你要需要处理的页面。另外,在国际环境下,使用<globalization fileEncoding="gb2312" requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" />不是好的做法 utf8 一桶浆糊!gbk什么的烦死了 .net 框架中有现成的方法,其解决方案简单的“令人发指”,所以没有什么人像搞java的人那样“事儿事儿”地去什么文章发布在网上。 求解求解 谢谢 跳转错误 错误 1 未能加载类型“OfficeChannel.Global”。 E:\OfficeChannel\OfficeChannel\Global.asax 1 用ajaxToolkit:CascadingDropDown 实现2级联动下拉列表问题,急!谢谢 有关aspx页面自定义错误更改问题 如何把分页的DataGrid导出成excel 数据库查询超时的问题,极度郁闷 DropDownList动态添加项目的时候,怎么显示空格? 求一个控件,请大家能为我介绍几个好网站 根据textbox1里的值搜索,在datalist里分页显示 像这样的js,怎样绑定 关于Calendar日历控件,求高手回答
这么 说吧 。是一个 静态 的 页面 提交表单 然后 ASPX 页面 获取表单 内容
静态 页面 加了 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />aspx 页面 Request.Form[“”].ToString()得到的是乱码 经过
public string str(string form)
{
string u16s = Request.Form[form].ToString().Trim();
Encoding GBK = Encoding.GetEncoding("GBK");
Encoding utf8 = Encoding.UTF8;
byte[] u16bytes = GBK.GetBytes(u16s);
byte[] u8bytes = Encoding.Convert(utf8, GBK, u16bytes);
string str = GBK.GetString(u8bytes);
return str;
}
后得到 的 是正常的 汉字 。。但有个问题
如果 汉字的 个数 是 奇数 则 最后 一位 是 “?”
<globalization
requestEncoding="utf-8"
responseEncoding="utf-8"
/>不要写gbk之类的
主要是 发送表单的html页面不能动 ,那页面 是 UTF-8 的 ,但 我项目 配置文件里有
<globalization fileEncoding="gb2312" requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" /> 是 GBK 的 两个 我都 不能 改
现在的问题就是 ,
转换 的时候 奇数 字符窜 最后一个 字符 就变成 ? 了
原因是
GBK编码是一个中文2个字节,而UTF-8编码是一个中文3个字节
但是 GBK.GetString(u8bytes); 这个 方法 每次读取2个字进行转换。
所以 奇数 字符串 会 剩下 一个字节 !所以 会出现 “?”但是 我不知道 该 用 什么方法 解决这问题
{
Request.ContentEncoding = Encoding.GetEncoding("utf-8");
}这样就可以正确接收到来自utf-8页面的内容了,无需再解码测试a.htm
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<head>
<title></title>
</head>
<body>
<form method="post" action="a.aspx">
<input name="content" />
<input type="submit" />
</form>
</body>
</html>
a.aspx<%@ Page Language="C#" Debug="true" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
Response.Write(Request.Form["content"]);
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
<form runat="server"></form>
</body>
</html>
Global.asax
<%@ Application Language="C#" %><script runat="server">public void Application_BeginRequest(object sender, EventArgs args)
{
Request.ContentEncoding = Encoding.GetEncoding("utf-8");
}
</script>需要注意的是,这个是对所有页面的,你可能需要判断页面url是不是你要需要处理的页面。另外,在国际环境下,使用
<globalization fileEncoding="gb2312" requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" />
不是好的做法