代码之家  ›  专栏  ›  技术社区  ›  remi bourgarel

修复编码问题导致的错误字符

  •  0
  • remi bourgarel  · 技术社区  · 16 年前

    最近我们的系统出现编码问题:

    如果我们的数据库中有字符串“_”,它就会在我们的网页上变成“__”。

    现在这个问题已经解决了,但问题是现在我们的数据库中有很多“__”:用户没有看到并验证这些字符预填的表单。

    我发现如果你用utf 8 c3a6读的话,你会得到“_”,如果你用ASCII读的话,你会得到“_”。

    这很奇怪,因为如果我执行

    "select convert(varbinary(40),N'æ'),convert(varbinary(40),'æ')"
    

    我没有同样的结果…

    你知道我如何修复我的数据库吗?

    谢谢

    2 回复  |  直到 16 年前
        1
  •  1
  •   Thomas    16 年前

    据我所知,修复的唯一方法是使用替换:

    Update Table
    Set Column = Replace(Column, N'æ', N'æ')
    

    在本例中,我假设列现在是Unicode(即nvarchar或nchar)。

        2
  •  0
  •   dan04    16 年前

    如果你用ASCII码读它,你会得到“__”。

    ascii只为字节00-7f分配字符。但是,有几个“扩展的ascii”编码,其中c3 a6代表“__Ω”,包括流行的西欧编码iso-8859-1和windows-1252,土耳其iso-8859-9和windows-1254。

    要解决编码问题,只需:

    1. 使用代码页1252(或土耳其语为1254)将字符串编码为字节数组。这将产生utf-8字节。
    2. 使用UTF-8将字节数组解码为字符串。