问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

在C#中怎样将Unicode的字符编码转换成gb2312字符编码

发布网友 发布时间:2022-04-30 01:32

我来回答

1个回答

热心网友 时间:2022-04-24 16:35

前面做一个基于sybase的mis系统, 由于sybase的后台是cp850编码,而.net平台不支持cp850编码。所以在程序中所有从数据库读出的中文都显示为''?''。
于是考虑在.net 平台中转换字符编码。于是查看了.net中字符编码的类System.Text.Encoding
里面支持的字符集编码有ibm850,没有cp850,后来查看资料才知道原来这两个名字指的是同一种编码规范。
于是开始进行编码转换,首先找到一个java的程序:

public String CP850ToGB2312(String str)
...{
try
...{
byte[] temp = str.getBytes("cp850");
String result = new String(temp, "gb2312");
return result;
}
catch (UnsupportedEncodingException ex)
...{ return null; }
}
public String GB2312ToCP850(String str)
...{
try
...{
byte[] temp = str.getBytes("gb2312");
String result = new String(temp, "cp850");
return result;
}
catch (UnsupportedEncodingException ex)
...{
return null;
}
}

然后在根据查找的System.Text.Encoding类的属性,方法写了如下的转换程序:

public string UTF8ToGB2312(string str)
...{
try
...{
Encoding utf8 = Encoding.GetEncoding(65001);
Encoding gb2312 = Encoding.GetEncoding("gb2312");//Encoding.Default ,936
byte[] temp = utf8.GetBytes(str);
byte[] temp1 = Encoding.Convert(utf8, gb2312, temp);
string result = gb2312.GetString(temp1);
return result;
}
catch (Exception ex)//(UnsupportedEncodingException ex)
...{
MessageBox.Show(ex.ToString());
return null;
}
}
public string GB2312ToUTF8(string str)
...{
try
...{
Encoding uft8 = Encoding.GetEncoding(65001);
Encoding gb2312 = Encoding.GetEncoding("gb2312");
byte[] temp = gb2312.GetBytes(str);
MessageBox.Show("gb2312的编码的字节个数:" + temp.Length);
for (int i = 0; i < temp.Length; i++)
...{
MessageBox.Show(Convert.ToUInt16(temp[i]).ToString());
}
byte[] temp1 = Encoding.Convert(gb2312, uft8, temp);
MessageBox.Show("uft8的编码的字节个数:" + temp1.Length);
for (int i = 0; i < temp1.Length; i++)
...{
MessageBox.Show(Convert.ToUInt16(temp1[i]).ToString());
}
string result = uft8.GetString(temp1);
return result;
}
catch (Exception ex)//(UnsupportedEncodingException ex)
...{
MessageBox.Show(ex.ToString());
return null;
}
}

主要使用的就是获取编码方式的类对象,
Encoding utf8 = Encoding.GetEncoding(65001);//使用code page
Encoding gb2312 = Encoding.GetEncoding("gb2312");//通过bodyname
获取字符编码字节序列:byte[] temp=utf8.GetBytes(str);
编码方式转换:byte[] temp1=Encoding.Convert(utf8, gb2312, temp);
获取编码的字符串:string str1=gb2312.GetString(temp1);
这样即完成了字符编码的转换。
Encoding.Default在 简体中文os中一般是gb2312格式。

static void Main(string[] args)
{
FileStream fs;
string fileName = "C://test.xml";
string message = "呵呵";
string m=System.Web.HttpUtility.UrlEncode(message, System.Text.Encoding.UTF8);
fs = new FileStream(fileName, FileMode.OpenOrCreate);
StreamWriter sw = new StreamWriter(fs);
fs.Seek(0, SeekOrigin.End);
sw.WriteLine("<?xml version=/"1.0/" encoding=/"UTF-8/"?><menu>" + message + "</menu>");
sw.Close();
fs.Close();
Console.Read();

}
private static string ToGB2312(string utfInfo)
{
string gb2312Info = string.Empty;
Encoding utf8 = Encoding.UTF8;
Encoding gb2312 = Encoding.GetEncoding("gb2312");
byte[] unicodeBytes = utf8.GetBytes(utfInfo);
byte[] asciiBytes = Encoding.Convert(utf8, gb2312, unicodeBytes);
char[] asciiChars = new char[gb2312.GetCharCount(asciiBytes, 0, asciiBytes.Length)];
gb2312.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0);
string gb2312info = new string(asciiChars);
return gb2312info;
}
private static string ToUTF8(string gb2312Info)
{
string utf8Info = string.Empty;
Encoding utf8 = Encoding.UTF8;
Encoding gb2312 = Encoding.GetEncoding("gb2312");
byte[] unicodeBytes = gb2312.GetBytes(gb2312Info);
byte[] asciiBytes = Encoding.Convert(gb2312, utf8, unicodeBytes);
char[] asciiChars = new char[utf8.GetCharCount(asciiBytes, 0, asciiBytes.Length)];
utf8.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0);
string utf8info = new string(asciiChars);
return utf8info;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
说课包括哪些方面 说课内容包括()。 如何在手机百度上删除对话记录? 结核病是什么样的疾病? 曹丕17岁得了肺痨,明知自己命不长久,还要强争王位,是不是很自私呢?_百... 古代小说常出现的病名 急求一篇"生活小窍门"(500字)的作文 至今最有什么小妙招 健康的戒烟方法 笔记本电池锁死是什么原因引起的? 直接用输入法打出来的字是什么编码的呢? 编码方式的编码方式 校园卡的编码方式什么? 计算机内码与外码的区别 在输入汉字时采用的编码叫什么,在输出汉字时采用的编码叫什么? 寓言故事的十个好词2句好句子 关于中国古代寓言故事优美词句摘抄 穿井得一人是一则古代寓言故事这则寓言中揭示寓意的句子是? 50个 寓言故事及寓意一样的话?你们那里 关于寓言故事的好句子 出自寓言故事的句子有哪些 狐狸和乌鸦的故事优美词句有哪些 关于“寓言故事”的好句子有哪些? 中国古代寓言故事优美词句摘抄 中国古代寓言好词好句好段有哪些? 寓言故事 好句。 用丝绸摩擦过的玻璃棒上带的电荷为___.电流的方向是___两种电荷间的相互作用规律___. 物理学中把被毛皮摩擦过的橡胶棒所带的电荷称为______电荷;电荷间的相互作用规律是______ 用丝绸摩擦过的玻璃棒所带的电荷,叫________;电荷间相互作用的规律是:同种电 自然界中只有 种电荷,人们把与毛皮摩擦过的橡胶棒所带的电荷叫 电荷。电荷间的相互作用规律是 java怎样实现将GB2312编码的字符串转换为ISO-8859-1编码的字符串 《啊,荒野前篇(2017)》百度云高清资源在线观看,菅田将晖主演的 易语言如何把GB2312格式转换成记事本里的utf-8? 为什么台湾用繁体字? 请问大佬有啊,荒野2017年上映的由菅田将晖主演的高清视频在线观看资源吗 GB 和 GBK 的区别 啊,荒野是真打吗 python中,cp936和utf-8有什么区别 charset=x-cp20936是什么字符编码 怎么评价菅田将晖的长相?为什么很多女生喜欢他? 跪求《啊,荒野 前篇》2017年播出的,岸善幸执导,菅田将晖和梁益准等主演的电影免费百度网盘资源 这个人是谁呀? 菅田将晖苏打的由来是什么? 张子枫的偶像是菅田将晖吗 这是哪一部日剧里面的 想看假面骑士有没有正确的看法和顺序呢? 求日剧《校对女孩河野悦子》完整版的百度云!谢谢!!! 高分!高手 J2EE,框架! 华为荣耀5a怎么把软件移到sd卡 中国银行手机银行基金交易账户开户