如何在连接字符串中将Access DB从ISO-8859-2更改为UTF-8?

时间:2020-03-05 18:55:44  来源:igfitidea点击:

我有一个ISO-8859-2格式的数据库,但是我需要以UTF-8创建XML。这意味着我必须在使用UTF-8进行prinitng之前对数据库进行编码。我对ASP.Net知之甚少,所以希望有人能提供帮助。

在PHP中,我将执行以下操作:

db_connect();
mysql_query("SET NAMES 'UTF8'");
mysql_query("SET character_set_client='UTF8'");

这是我用于数据库连接的ASP.Net代码:

'CONNECTION TO DATABASE
 dim dbconn,sql,dbcomm
 dbconn=New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & _
      "Data Source=" & Server.MapPath("../baze/test.mdb"))

 dbconn.Open()          

 sql="SELECT * FROM nekretnine, tipovinekretnina WHERE nekretnine.idtipnekretnine = tipovinekretnina.idtipnekretnine ORDER BY nekretnine.idnekretnine"
 dbcomm=New OleDbCommand(sql,dbconn)
 dbread=dbcomm.ExecuteReader()

 while dbread.Read()

我在哪里以及如何编码为UTF-8?

解决方案

回答

.NET Framework的内部字符串类型为UTF-16. 所有数据库访问都将转换为UTF-16,以便我们可以适当地查看数据:数据库或者OLE DB提供程序将转换为UTF-16.

然后,XML writer类(我们正在使用XmlDocument或者XmlWriter,对吗?)将在输出上转换为UTF-8.

基本上,我们不需要执行任何其他操作。

回答

假设我们在str中有一个值字符串,这就是纯.NET的实现方式。

var encoding = System.Text.Encoding.GetEncoding("iso-8859-2");

var bytes = System.Text.Encoding.Convert(encoding, System.Text.Encoding.Default, encoding.GetBytes(str));

var newString = System.Text.Encoding.Default.GetString(bytes);