如何在c#中将UNICODE字符串转换为MBCS?

时间:2011-10-17 04:01:55

标签: c# unicode mbcs

我有一个UNICODE字符串(中文),我想将其转换回MBCS,以便将其作为参数添加到SQL查询中。 (在varchar中SQL Server中的列,因此我需要进行此转换)。

如何在c#中转换为MBCS? 请帮忙。

谢谢, Praseo

3 个答案:

答案 0 :(得分:2)

“MBCS”可能是一些编码。对于中国语言环境,它将是code page 936,一个GB变体,您可以使用以下代码对其字节进行编码:

byte[] bytes= Encoding.GetEncoding(936).GetBytes("你好")
=>
{196, 227, 186, 195}

如果您没有特别谈论GB编码,并且希望当前系统的默认编码是多字节编码,那么您可以使用默认(“ANSI”)编码,该编码将是MBCS编码:

byte[] bytes= Encoding.Default.GetBytes("你好")
=>
{196, 227, 186, 195}  // on a system in the China locale (cp936)
{167, 65, 166, 110}   // on a system in the HK locale (cp950)

现在要将您的字节数组放入查询中,您必须:

1)最好,使用带有基于字节的SqlDbType的参数,例如:

command.Parameters.AddWithValue("@greeting", bytes);

2)orif你必须将它直接插入查询字符串,将字节编码为十六进制文字,例如:

"0x"+BitConverter.ToString(bytes).Replace("-", "")
=>
... WHERE greeting=0xC4E3BAC3 ...

(这是非ANSI标准的SQL Server语法)

答案 1 :(得分:0)

感谢bobince提示。 我无法参数化我的查询执行。

最后,我的一位资深同事提供了帮助。 :) 下面是将Unicode编码字符串转换为由多字节字符(MBCS)组成的字符串的另一种解决方案,用于在T-SQL中与遗留数据库中的varchar列进行比较。

我们可以使用类SqlString的方法GetNonUnicodeBytes()。

下面是一段代码片段。

        string inputUnicodeString = "你好";
        SqlString mySqlString = new SqlString(inputUnicodeString);
        byte[] mbcsBytes = mySqlString.GetNonUnicodeBytes();
        string outputMbcsString = string.Empty;
        for (int index = 0; index < mbcsBytes.Length; index++)
        {
            outputMbcsString += Convert.ToChar(mbcsBytes[index]);
        }

这有助于我将所需的varchar数据库列与UNICODE中用户请求的字符串进行比较。 希望这个回复有助于他人。

此致

Praseo

答案 2 :(得分:-1)

我不确定你是否想要这个:

string result = Encoding.GetEncoding("gb2312").GetString(Encoding.Unicode.GetBytes(yourStr));