求一C#汉字和ascii码相互转化的类

miaoxiao423 2009-05-09 05:02:14
做socket套接字编程的时候,服务器要将接收到的ascii字符还原为汉字,又要将汉字进行转化城ascii发送给客户端。
求一公共类,实现输入汉字,返回ASCII码,输入ASCII码,返回汉字。两种方法的对应可逆的。
不甚感激!
...全文
904 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
pathuang68 2009-05-10
  • 打赏
  • 举报
回复
顶好贴!将两边的编码设成一样就可以了。
wuyq11 2009-05-09
  • 打赏
  • 举报
回复
Public Function AsciiToHex(strChinese As String) As String '汉字转16进制ASCII
Dim iLen As Long
iLen = Len(strChinese)
Dim tmpByte() As Byte
Dim iNext As Long
Dim iTmp As Integer
Dim strTmp As String
For iNext = 1 To iLen
iTmp = Abs(Asc(Mid(strChinese, iNext, 1)))
If iTmp > 127 Then
tmpByte = StrConv(Mid(strChinese, iNext, 1), vbFromUnicode)
strTmp = strTmp & Hex(tmpByte(0))
strTmp = strTmp & Hex(tmpByte(1))
Else
strTmp = strTmp & Hex(iTmp)
End If
Next
AsciiToHex = strTmp
End Function
参考
蓝海D鱼 2009-05-09
  • 打赏
  • 举报
回复

string oldHtml = GetYourGB2312Html(); //
Encoding encoding;
encoding = System.Text.Encoding.GetEncoding( "GB2312 ");
// string > bytes
byte[] bytes = encoding.GetBytes(oldHtml);
encoding = System.Text.Encoding.UTF8;
// bytes > string
string newOldHtml = encoding.GetString(bytes);
//Response.Write(newOldHtml);
这样就可以把gb2312转成utf8了


改变字符串编码
改变字符串编码,方便某些时候输出或者显示.

字符串编码string txt = "[{\"Title\":\"学习使用AJAX技术\",\"Url\":\"#\",\"ArticleId\":\"Art1234\"},{\"Title\":\"使用JQuery构建网站\",\"Url\":\"#\",\"ArticleId\":\"Art1235\"},{\"Title\":\"使用JSON文件传输数据\",\"Url\":\"#\",\"ArticleId\":\"Art1236\"}]";byte[] txt1 = System.Text.Encoding.GetEncoding("gb2312").GetBytes(txt);byte[] txt2 = System.Text.Encoding.Convert(System.Text.Encoding.GetEncoding("gb2312"), System.Text.Encoding.UTF8, txt1);string txt3 = System.Text.Encoding.UTF8.GetString(txt2);
zhensoft163 2009-05-09
  • 打赏
  • 举报
回复
还没有做过呢!来看看的 啊
jimgreat 2009-05-09
  • 打赏
  • 举报
回复
我做过类似的东西 C#和C++ Socket通信 都统一使用utf8就可能传汉字了
jeremyyang824 2009-05-09
  • 打赏
  • 举报
回复
多谢6楼的赐教
Default是取得当前系统设置的默认字符集编码方式,如果通讯双方设置不一样就会有问题。
刚才又查了下MSDN:
"不同的系统可能使用不同的编码作为默认编码,因此,从一个系统流入另一个系统的数据可能不会被正确转换。若要确保编码后的字节能够正确解码,请使用带前导码的 Unicode 编码(即 UTF8Encoding、UnicodeEncoding 或 UTF32Encoding)另一选择是使用较高级别的协议以确保使用同一格式进行编码和解码。"
vrhero 2009-05-09
  • 打赏
  • 举报
回复
楼上的代码在非简体中文系统上必然产生乱码或者对方发送的不是GB2312也会乱码...你必然首先确认通信双方采用什么编码才行...

把System.Text.Encoding.Default改成System.Text.Encoding.GetEncoding("GB2312")或双方约定的编码...
jeremyyang824 2009-05-09
  • 打赏
  • 举报
回复
参考:
http://topic.csdn.net/t/20020716/11/877757.html
jeremyyang824 2009-05-09
  • 打赏
  • 举报
回复
拆成2个
jeremyyang824 2009-05-09
  • 打赏
  • 举报
回复

//获得汉字的区位码
byte[] array1 = new byte[2];
array1 = System.Text.Encoding.Default.GetBytes("我");
int i1 = (short)(array1[0] - '\0');
int i2 = (short)(array1[1] - '\0');

//反解码为汉字
byte[] array2 = new byte[2];
array2[0] = (byte)i1;
array2[1] = (byte)i2;
string s = System.Text.Encoding.Default.GetString(array2);
vrhero 2009-05-09
  • 打赏
  • 举报
回复
不可能的...ASCII只有256个字符不能容纳汉字,最差也要用GB2312...
dugupiaoyun 2009-05-09
  • 打赏
  • 举报
回复
貌似ascii转回不了汉字。

干嘛不用utf.

110,572

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧