+ -
当前位置:首页 → 问答吧 → WCF不支持汉语的问题

WCF不支持汉语的问题

时间:2011-06-04

来源:互联网

如题, 本人做了个WCF跨域访问应用, 在客户端输入User对象, 然后通过UserName和UserPasswrod判断用户是否正确登录, 如果用户名(UserName)为英语,登录没有问题,一旦换成汉语用户名(UserName)为汉语,就不能够正确登录了,(并且VisualStudio2008的文本框字符集只能选择GB2312和西欧字符),我的客户端代码如下:
复制内容到剪贴板
代码:
private void btnLogin_Click(object sender, EventArgs e)
        {
            using (UserLoginClient proxy = new UserLoginClient())
            {
                string username = Encoding.GetEncoding("UTF-8").GetString(Encoding.GetEncoding("utf-8").GetBytes(this.txtUserName.Text.Trim()));//此处将用户名设置为UTF-8格式
User userinfo = proxy.Login(username, this.txtUserPwd.Text.Trim());
                if (userinfo.Username == null)
                {
                    MessageBox.Show("没有用户");
                }
                else
                {
                    string message =
                    userinfo.Uid.ToString() + "\n\t" +userinfo.Username + "\n\t" +
userinfo.Password + "\n\t" +//多余部分省略userinfo.Salt.ToString();
                    this.txtShowMessage.Text = message;
                }
            }
        }
服务器端代码如下
复制内容到剪贴板
代码:
public User Login(string userName, string userPass)
        {
            User userinfo = new User();
            if (userName.Equals("admin") && userPass.Equals("admin"))
            {
                userinfo.Uid = 1;
                //string userpass = Encoding.UTF8.GetString(Encoding.GetEncoding("utf-8").GetBytes(this.txtUserPwd.Text.Trim()));
                userinfo.Username = Encoding.UTF8.GetString(Encoding.GetEncoding("utf-8").GetBytes("仰天长啸"));
                userinfo.Nickname = "admin";
                userinfo.Password = "admin";
userinfo.Spaceid = 1;
//多余部分省略
userinfo.Newsletter = 1;
                userinfo.Salt = "Salt";
            }
            return userinfo;
        }
当客户端用户名文本框输入"仰天长啸"之后,未取出用户对象

作者: 渭浊   发布时间: 2011-06-04

问题就是出在这个汉字编码上。2008的系统汉字都是UNICODE编码。你在别的程序里用UNICODE编辑好汉字,然后复制到你的源文件里,再试一下。

作者: sharingbar   发布时间: 2011-06-05