首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在c#中将UNICODE字符串转换为MBCS?

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

Stack Overflow用户
提问于 2011-10-17 12:01:55
回答 3查看 4.5K关注 0票数 1

我有一个UNICODE字符串(中文),我想将其转换回MBCS,以便将其作为参数添加到SQL查询中。( SQL Server中的列在varchar中,所以这个转换对我来说是必要的)。

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

谢谢,Praseo

EN

回答 3

Stack Overflow用户

发布于 2011-10-18 03:47:48

“MBCS”可以是许多编码。对于中国语言环境,它将是code page 936,一种GB变体,您可以使用以下命令将其编码为字节:

代码语言:javascript
复制
byte[] bytes= Encoding.GetEncoding(936).GetBytes("你好")
=>
{196, 227, 186, 195}

如果您不是专门讨论GB编码,而是希望将多字节编码作为当前系统的默认编码,那么您可以只使用默认(“ANSI”)编码,即MBCS编码:

代码语言:javascript
复制
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的参数,例如:

代码语言:javascript
复制
command.Parameters.AddWithValue("@greeting", bytes);

2)或者,如果您必须将其直接插入到查询字符串中,请将字节编码为十六进制文字,例如:

代码语言:javascript
复制
"0x"+BitConverter.ToString(bytes).Replace("-", "")
=>
... WHERE greeting=0xC4E3BAC3 ...

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

票数 2
EN

Stack Overflow用户

发布于 2011-10-23 00:01:54

谢谢博本斯的提示。我不能参数化我的查询执行。

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

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

下面是一段代码片段。

代码语言:javascript
复制
        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

票数 0
EN

Stack Overflow用户

发布于 2011-10-17 13:52:58

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

代码语言:javascript
复制
string result = Encoding.GetEncoding("gb2312").GetString(Encoding.Unicode.GetBytes(yourStr));
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7789255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档