您的位置:首页 > 数据库

C#中字符编码:sql语句中包含中文字符转换为utf8编码

2013-10-09 21:52 405 查看
这个问题困扰了我好长时间,终于解决了。postgreSQL数据库使用的是utf8编码,如果执行的sql语句中包含中文字符需要字符转换,但是一直转换失败。

如下代码实现utf8的转换

string sql = string.Format("update test_temp set name = '{0}' where id = {1}", "测试数据", "1");
Encoding utf8= Encoding.UTF8;
Encoding defaultCode= Encoding.Default;
byte[] defaultBytes = utf8.GetBytes(sql);
byte[] utf8Bytes = Encoding.Convert(defaultCode, utf8, defaultBytes);
char[] utf8Chars = new char[utf8.GetCharCount(utf8Bytes, 0, utf8Bytes.Length)];
utf8.GetChars(utf8Bytes, 0, utf8Bytes.Length, utf8Chars, 0);
string utf8String = new string(utf8Chars);


实现参考自如下代码

static void Main()
{
string utf8String = "骞垮憡涓戦椈";

// Create two different encodings.
Encoding utf8= Encoding.UTF8;
Encoding defaultCode= Encoding.Default;

// Convert the string into a byte[].
byte[] utf8Bytes = default.GetBytes(utf8String );

// Perform the conversion from one encoding to the other.
byte[] defaultBytes = Encoding.Convert(utf8, defaultCode, utf8Bytes );

// Convert the new byte[] into a char[] and then into a string.
// This is a slightly different approach to converting to illustrate
// the use of GetCharCount/GetChars.
char[] defaultChars = new char[defaultCode.GetCharCount(defaultBytes , 0, defaultBytes .Length)];
defaultCode.GetChars(defaultBytes , 0, defaultBytes .Length, defaultChars , 0);
string defaultString = new string(defaultChars );

// Display the strings created before and after the conversion.
Console.WriteLine("Original string: {0}", utf8String);
Console.WriteLine("Ascii converted string: {0}", defaultString);

//或者如下:
byte[] buffer1 = Encoding.Default.GetBytes(utf8String );
byte[] buffer2 = Encoding.Convert(Encoding.UTF8, Encoding.Default, buffer1, 0, buffer1.Length);
string strBuffer = Encoding.Default.GetString(buffer2, 0, buffer2.Length);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: