我用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代码无法进行大的更改?
有人有线索吗?
答案 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"))