修复由于编码问题导致的坏字符

发布于 2024-09-03 08:43:51 字数 374 浏览 3 评论 0原文

最近我们的系统遇到了编码问题:

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

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

我发现如果你用 utf 8 C3A6 阅读,你会得到“æ”,如果你用 ascii 阅读,你会得到“¡”。

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

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

我不会得到相同的结果...

您知道如何修复我的数据库吗(即将所有“á”更改为“æ”)?

谢谢

Recently we had an encoding problem in our system :

If we had the string "æ" in our db ,it became "æ" on our web pages.

Now this problem is solved, but the problem is that now we have a lot of "æ" in our database : users didn't see and validate pre-filled form with these characters.

I found that If you read in utf 8 C3A6 you'll get "æ", if you read it in ascii you'll get "æ".

It's strange because if I execute

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

I don't have the same result...

Do you have any idea on how I can fix my database (ie change all "æ" to "æ") ?

thx

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

空城仅有旧梦在 2024-09-10 08:43:51

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

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

在这种情况下,我假设该列现在是 Unicode(即 nvarchar 或 nchar)。

As far as I know, the only means to fix is to use Replace:

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

In this case, I'm assuming that the column is now Unicode (i.e. nvarchar or nchar).

魔法唧唧 2024-09-10 08:43:51

如果你用 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 将字节数组解码为字符串。

if you read it in ascii you'll get "æ".

ASCII only assigns characters to the bytes 00-7F. There are, however, several "extended ASCII" encodings in which C3 A6 represents "æ", including the popular Western European encodings ISO-8859-1 and windows-1252, and Turkish ISO-8859-9 and windows-1254.

To fix your encoding problem, simply:

  1. Encode the string to a byte array using code page 1252 (or 1254 for Turkish). This should produce the UTF-8 bytes.
  2. Decode the byte array to a string using UTF-8.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文