这几天做越南文,用我们公司自己开发的cms,一直都做中文的,所以对越南文支持不好。
大家帮忙看看下面是什么问题,谢了。我要保存的字符串是:“Bệnh viện”,数据库是:sqlserver,字段类型:varchar(不想改成nvarchar,对其它站点有影响)
保存后打开数据库看,结果是:“Bệnh viện”
网页读取显示是没有问题的,但问题就是搜索的时候,搜不到。问题:
1.“Bệnh viện”这种是什么编码?
2.用程序怎样转换:“Bệnh viện”=>“Bệnh viện”?

解决方案 »

  1.   

    求一个用.net转换的办法好让我能够实现搜索就可以了
      

  2.   

    “不想改成nvarchar”,那就不可能了...非unicode字符只能支持一种代码页...就是说你不可能让越南文与中文或者其他多字节文字同时存在而不乱码...
      

  3.   

    服务器上装一个SQL越南语言包
      

  4.   


    我不需要保存原来的数据,所以现在保存没问题的,数据库自动转换成“Bệnh viện”形式的数据,就是关键字搜索有问题,所以只要把搜索的关键词用程序转换成跟数据库保存的数据形式一样就可以了,就不知道怎么转换
      

  5.   


    .net有没有方法把“Bệnh viện”形式 转换成“Bệnh viện”形式?
      

  6.   

    字符串用N'...'应该可以。。我刚试了下select 'Bệnh'
    ----
    B?nh-----
    -----
    select N'Bệnh'
    ----
    Bệnh
      

  7.   


    问题是我数据库里面的数据已经是:“Bệnh viện”形式了,所以再用“Bệnh”是搜不到的
      

  8.   

    .NET的字符只使用UTF-16一种编码,其他编码只能存在于非字符类型中...你所谓的转换是无法成立的...ps:9楼的人家要能换nvarchar还用你试吗...
      

  9.   

    http://baike.baidu.com/view/952329.htm
      

  10.   

    数据库里用 N''  的形式表示 UNICODE
      

  11.   


    我不想修改数据库,所以能不能提供能用程序去解决办法?
    也就是说怎样实现下面的转换:
    select * from ew_shop where title like '%Bệnh%'          (查不到数据)
    转换为:
    select * from ew_shop where title like '%Bệnh%'    (可以查到数据)
      

  12.   

    不好整,谁教你们公司当初不用 nvarchar。可以迂回一下,搜索的时候,搜索的时候把关键字转换成ệ 这些玩意是 html 字符实体。
      

  13.   

    解码下:Server.HtmlDecode("ệ")
      

  14.   


    你这种办法是把:“ệ”转换为“ệ”,有没有反过来的办法?
    就是说“ệ”转换为“ệ”?
      

  15.   

    一样的  编码而已把  HtmlEncode
      

  16.   

    可以将char转换为 int,比如 ệ 转换之后是  7879,问题在于你怎么知道哪个字符是要转的,哪个是不要转的,有个有点欠揍的办法,你可以把关键字写进数据库,再读出来,看看行不行
      

  17.   


    测试过,HtmlEncode不能把“ệ”转换为“ệ”
      

  18.   


    你的办法可行哦,如果其它字符用HtmlEncode来转换等于其本身就不用转换为int,这样就可以了吧,不过的确是没办法中的办法,期待更好的
      

  19.   

    根据phil999的提示,想到了一个蠢办法,大家提提意见:string s = "Bệnh";
    char[] chars = s.ToCharArray();
    foreach (char c in chars)
    {
         if (Regex.IsMatch(c.ToString(), @"[a-zA-Z]", RegexOptions.IgnoreCase))
         {
              Response.Write(c.ToString());
         }
         else
         {
              Response.Write("&#" + Convert.ToInt32(c).ToString() + ";");
         }
    }
      

  20.   

    附加 @blongnet
    越南文具体也不清楚,但是有中文什么的就不要转码了
    所以正则的话修改下: @"[a-zA-Z\u4e00-\u9fa5]"
    具体还有那些不需要转码的就放到正则里面。