Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 修复由于编码问题导致的错误字符_C#_Sql_Sql Server_Encoding_Utf 8 - Fatal编程技术网

C# 修复由于编码问题导致的错误字符

C# 修复由于编码问题导致的错误字符,c#,sql,sql-server,encoding,utf-8,C#,Sql,Sql Server,Encoding,Utf 8,最近,我们的系统出现了一个编码问题: 如果我们的数据库中有字符串“æ”,那么它在我们的网页上就会变成“Ô 现在这个问题已经解决了,但问题是现在我们的数据库中有很多“Ô字符:用户没有看到并验证这些字符预先填充的表单 我发现如果你读UTF8C3A6你会得到“æ”,如果你读ascii你会得到“Ô 这很奇怪,因为如果我执行 "select convert(varbinary(40),N'æ'),convert(varbinary(40),'æ')" 我没有相同的结果 你知道我如何修复我的数据库

最近,我们的系统出现了一个编码问题:

如果我们的数据库中有字符串“æ”,那么它在我们的网页上就会变成“Ô

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

我发现如果你读UTF8C3A6你会得到“æ”,如果你读ascii你会得到“Ô

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

"select convert(varbinary(40),N'æ'),convert(varbinary(40),'æ')"
我没有相同的结果

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


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

Update Table
Set Column = Replace(Column, N'æ', N'æ')
在本例中,我假设该列现在是Unicode(即nvarchar或nchar)

如果你读ascii码,你会得到“Ô

ASCII仅为字节00-7F分配字符。然而,有几种“扩展ASCII”编码,其中C3 A6表示“Ã阿尔法”,包括流行的西欧编码ISO-8859-1和windows-1252,以及土耳其ISO-8859-9和windows-1254

要解决编码问题,只需执行以下操作:

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

  • 我知道如何替换,这里我想处理每一个奇怪的角色:“ó”变成了“ó”。我想做一些能够处理每一件事情的事情(正如我在帖子中所说的,预期中的角色和糟糕的角色之间存在着逻辑联系,因此必须有一种回归的方式)。@remi bourgarel-这就是我的观点。除了通过一系列替换调用手动更正数据之外,没有其他银弹解决方案。您将无法获得1:1的匹配,因为在某些情况下,Unicode可能将您的文本编码为两个字符而不是一个字符。正如Thomas所说,这里没有银弹。。。你知道我是否可以用sql来做吗?