Asp.net使用错误的编码呈现字符串,但PHP没有(MySQL)

时间:2010-05-20 16:55:23

标签: c# php asp.net mysql encoding

我用MySQL作为数据库接管了一些旧的php应用程序。在数据库内部,有些表包含具有本地化字符串的内容(因此包含特殊字符)

目前有一个PHP应用程序访问该数据库。我的工作是创建一个ASP.net(C#codebehind)应用程序,它也可以访问这些字符串。就编码而言,这是有效的。

如果我尝试访问这些字符串,我会遇到一种编码问题,比如'Óndern'和'Prüfzeichen',但仅限于ASP.net应用程序。 PHP应用程序将utf-8设置为charset,并且字符串完美呈现。在ASP.net应用程序中,无论页面编码如何,它都是乱码。

在MySQL数据库中,指定表'translations'的字符集设置为'latin --cp1252 West European',并整理为'latin_swedish_ci'。

我似乎无法弄清楚PHP显然在做什么,而ASP.net却没有。我跟踪了PHP代码,从数据库中获取字符串时找不到任何特殊编码的迹象。

问题是,如何在不修改数据库的情况下确保ASP.net应用程序内部的正确编码,因为php代码无法进行大的更改?

有人有线索吗?

3 个答案:

答案 0 :(得分:2)

最好的长期解决方案是将表转换为使用UTF-8编码:

ALTER TABLE translations CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

如果数据已经是utf-8格式(即使字符集是latin1),您需要将每列转换为正确的编码。

这会将定义为latin1但包含utf8的列转换为声明为并包含utf8的列:

ALTER TABLE translations CHANGE columnNameHere columnNameHere BLOB;
ALTER TABLE translations CHANGE columnNameHere columnNameHere TEXT CHARACTER SET utf8;

答案 1 :(得分:1)

  

我似乎无法弄清楚PHP显然在做什么,

PHP应用将utf-8设置为charset。用于数据库连接。使用SET NAMES <encoding>查询。 <encoding>是您的网页编码

答案 2 :(得分:0)

如果最终设法找到转换为UTF8的方式。

System.Text.Encoding.UTF8.GetString(System.Text.Encoding.Default.GetBytes("convert me"))