C# 和 Php 的 Unicode 问题
Unicode issue with C# and Php
我在这里没有看到类似的东西,但如果有重复的地方,请见谅post。
这是我的设置>> 我使用 "outdated" Windows 7 机器,上面装有 Visual Studio 2010。请多多包涵。
C# 2010 Express 到目前为止运行良好。最近我一直在使用托管在 WAMP(或 XAMP 或 easyPHP)服务器上的 MySQL 数据库。我正在手动将 C# 应用程序连接到 MySQL 数据库。
现在,我为保加利亚项目开发的软件出现问题(因此它必须支持西里尔字符)。
这是代码>>
private MySql.Data.MySqlClient.MySqlConnection connection = new MySql.Data.MySqlClient.MySqlConnection(); //connection
private MySql.Data.MySqlClient.MySqlDataAdapter data = new MySql.Data.MySqlClient.MySqlDataAdapter(); //adapter
connection.ConnectionString ="server=localhost;"+ "database=xxxxx;"+ "uid=root;"+ "password=;"; //connection string
try
{
connection.Open(); //opening the connection
MySql.Data.MySqlClient.MySqlCommand command = connection.CreateCommand(); //creating a query
command.CommandText = "SELECT * FROM data"; //initial query for listing the table
data.SelectCommand = command; //executing the query
DataSet dataset = new DataSet(); //C# procedures, creating a dataset for gridview
data.Fill(dataset, "sample_data"); //filling the dataset
dataGridView1.DataSource = dataset; //setting up the dataset towards the gridview
dataGridView1.DataMember = "sample_data"; //the data that are going to be sent...
}
因此,我用数据库中的数据填充了 dataGridView1。一切都很好,之前填充的西里尔字符看起来不错。
现在正题>>
如果我想将数据发送到数据库中,我会这样写:
string comm1 = "INSERT INTO data (хххх, хххх) VALUES ('Abc', 'Абв')";
command.CommandText = comm1;
command.ExecuteNonQuery();
第一个(拉丁)字符被证明是好的,但后面的不是。事实上,数据库中充满了问号 (?)。
目前我尝试过的:
- 我正在使用 PhpMyAdmin 设计数据库。如果我尝试通过 PHP 脚本发送所需的西里尔字符,它们最终会这样写:Драган。如果您从浏览器读取数据库,它们会很好(可能是因为它们获得了各种 unicode 支持)。但是,您无法正常搜索数据库...
- 已将列的类型从 Varchar 更改为 Text。没用。
- 我已经从 UTF-8ci 一路更改了 table 的 collation (不区分大小写)到 Windows Cyrillic 1251 general... 和 Bin。没用。
- 我试过更改数据库引擎。从MylSAM,到InnoDB...它不起作用。
- 我试过操纵字符串中的文本
string commm2 = commm1.Replace("Дра", "\u0414 \u0440 \u0430");
。没用。
我已经转换了字符串
byte[] comm22 = Convert.FromBase64String(commm1);
字符串 commm3 = 编码。UTF8.GetString(comm22);
。没用。
- 完全排除字符串...我直接在函数本身中输入了所需的文本。没用。
- 我试过在字符串前面,字符前面加“@”,“/”,没用。
我在我的 php 应用程序中遇到了与阿拉伯字符串相同的问题,在确保表和数据库排序规则设置设置为 utf8 之后,我在发送或接收数据之前执行以下查询设法解决了这个问题
mysqli_set_charset('utf8',$this->connection);
mysqli_query( $this->connection, 'SET NAMES "utf8" COLLATE "utf8_general_ci"' );
问题现已解决,但 utf8 适用于阿拉伯语
,除了在 (insert/select) 查询
之前执行 SET NAMES 查询外,无需更改任何内容
希望对您有所帮助
我在这里没有看到类似的东西,但如果有重复的地方,请见谅post。 这是我的设置>> 我使用 "outdated" Windows 7 机器,上面装有 Visual Studio 2010。请多多包涵。
C# 2010 Express 到目前为止运行良好。最近我一直在使用托管在 WAMP(或 XAMP 或 easyPHP)服务器上的 MySQL 数据库。我正在手动将 C# 应用程序连接到 MySQL 数据库。 现在,我为保加利亚项目开发的软件出现问题(因此它必须支持西里尔字符)。
这是代码>>
private MySql.Data.MySqlClient.MySqlConnection connection = new MySql.Data.MySqlClient.MySqlConnection(); //connection
private MySql.Data.MySqlClient.MySqlDataAdapter data = new MySql.Data.MySqlClient.MySqlDataAdapter(); //adapter
connection.ConnectionString ="server=localhost;"+ "database=xxxxx;"+ "uid=root;"+ "password=;"; //connection string
try
{
connection.Open(); //opening the connection
MySql.Data.MySqlClient.MySqlCommand command = connection.CreateCommand(); //creating a query
command.CommandText = "SELECT * FROM data"; //initial query for listing the table
data.SelectCommand = command; //executing the query
DataSet dataset = new DataSet(); //C# procedures, creating a dataset for gridview
data.Fill(dataset, "sample_data"); //filling the dataset
dataGridView1.DataSource = dataset; //setting up the dataset towards the gridview
dataGridView1.DataMember = "sample_data"; //the data that are going to be sent...
}
因此,我用数据库中的数据填充了 dataGridView1。一切都很好,之前填充的西里尔字符看起来不错。
现在正题>>
如果我想将数据发送到数据库中,我会这样写:
string comm1 = "INSERT INTO data (хххх, хххх) VALUES ('Abc', 'Абв')";
command.CommandText = comm1;
command.ExecuteNonQuery();
第一个(拉丁)字符被证明是好的,但后面的不是。事实上,数据库中充满了问号 (?)。
目前我尝试过的:
- 我正在使用 PhpMyAdmin 设计数据库。如果我尝试通过 PHP 脚本发送所需的西里尔字符,它们最终会这样写:Драган。如果您从浏览器读取数据库,它们会很好(可能是因为它们获得了各种 unicode 支持)。但是,您无法正常搜索数据库...
- 已将列的类型从 Varchar 更改为 Text。没用。
- 我已经从 UTF-8ci 一路更改了 table 的 collation (不区分大小写)到 Windows Cyrillic 1251 general... 和 Bin。没用。
- 我试过更改数据库引擎。从MylSAM,到InnoDB...它不起作用。
- 我试过操纵字符串中的文本
string commm2 = commm1.Replace("Дра", "\u0414 \u0440 \u0430");
。没用。 我已经转换了字符串
byte[] comm22 = Convert.FromBase64String(commm1); 字符串 commm3 = 编码。UTF8.GetString(comm22);
。没用。
- 完全排除字符串...我直接在函数本身中输入了所需的文本。没用。
- 我试过在字符串前面,字符前面加“@”,“/”,没用。
我在我的 php 应用程序中遇到了与阿拉伯字符串相同的问题,在确保表和数据库排序规则设置设置为 utf8 之后,我在发送或接收数据之前执行以下查询设法解决了这个问题
mysqli_set_charset('utf8',$this->connection);
mysqli_query( $this->connection, 'SET NAMES "utf8" COLLATE "utf8_general_ci"' );
问题现已解决,但 utf8 适用于阿拉伯语 ,除了在 (insert/select) 查询
之前执行 SET NAMES 查询外,无需更改任何内容希望对您有所帮助