不知道如何解决,网上搜了很多方法,都有问题,或者没有完全解决,特别是遇到中文与非中文(例如数字,e文自负)混合的string时总是出现些"?",似乎是gb2312是2字节,而utf8是3字节的编码
已知postgresql编码是utf8,且在其中使用中文没有问题,但对中文支持确实不太好,至少我通过其它软件录入中文时是有问题(但他自带的管理器支持中文),postgresql方面先放一放
我的那个dll库是c++写的,对中文的支持没有问题,因为读别的数据源没有问题
我现在的方法是如下:
Encoding utf8 = Encoding.UTF8;
Encoding gb2312 = Encoding.GetEncoding("GB2312");
byte[] results = Encoding.Convert( utf8, gb2312,System.Text.Encoding.Default.GetBytes(str));
//上句中的str就是dll库a()返回的string结果
String result = System.Text.Encoding.Default.GetString(results);
结果出了一点问题
例如,如果str="我是中国人"这样的纯中文字符,那么完全没有问题,或者纯数字、e文字符都没有问题
如果str="长春江洋路77号",那么结果是“长春江洋??7?”
str="我是一中国st人",那么结果是“我是一中国st?”
我通过读取byte,发现utf8每个中文字符对应3个字节码,数字和e文字符都是一个字节码
但是gb2312是每个中文对应2个字节码,数字和e文字符都是1个字节码
例如utf8下 "我是4中国s人"对应如下:
230-136-145-230-152-175-52-228-184-173-229-155-189-115-228-186-186
7 个解决方案
#1
居然没有人遇到这个问题?
#2
顶一下
#3
顶一下
#4
string str = "utf-8编码的字符串";
byte[] data = Encoding.UTF8.GetBytes(str);
data = Encoding.Convert(Encoding.UTF8, Encoding.GetEncoding("gb2312"), data);
str = Encoding.GetEncoding("gb2312").GetString(data);
#5
sq_zhuyi的方法不行,完全都是乱码了,我的方法只是部分乱码
#6
byte[] aa= new byte[1024];
int bb=MyStream.Read(MyBytes,0,MyBytes.Length);
string Message=System.Text.Encoding.GetEncoding("GB2312").GetString(aa,0,bb);
在不行试试
string Message = System.Text.Encoding.UTF8.GetString(aa, 0, bb);
int bb=MyStream.Read(MyBytes,0,MyBytes.Length);
string Message=System.Text.Encoding.GetEncoding("GB2312").GetString(aa,0,bb);
在不行试试
string Message = System.Text.Encoding.UTF8.GetString(aa, 0, bb);
#7
没修改完
byte[] aa= new byte[1024];
int bb=MyStream.Read(aa,0,aa.Length);
string Message=System.Text.Encoding.GetEncoding("GB2312").GetString(aa,0,bb);
在不行试试
string Message = System.Text.Encoding.UTF8.GetString(aa, 0, bb);
#1
居然没有人遇到这个问题?
#2
顶一下
#3
顶一下
#4
string str = "utf-8编码的字符串";
byte[] data = Encoding.UTF8.GetBytes(str);
data = Encoding.Convert(Encoding.UTF8, Encoding.GetEncoding("gb2312"), data);
str = Encoding.GetEncoding("gb2312").GetString(data);
#5
sq_zhuyi的方法不行,完全都是乱码了,我的方法只是部分乱码
#6
byte[] aa= new byte[1024];
int bb=MyStream.Read(MyBytes,0,MyBytes.Length);
string Message=System.Text.Encoding.GetEncoding("GB2312").GetString(aa,0,bb);
在不行试试
string Message = System.Text.Encoding.UTF8.GetString(aa, 0, bb);
int bb=MyStream.Read(MyBytes,0,MyBytes.Length);
string Message=System.Text.Encoding.GetEncoding("GB2312").GetString(aa,0,bb);
在不行试试
string Message = System.Text.Encoding.UTF8.GetString(aa, 0, bb);
#7
没修改完
byte[] aa= new byte[1024];
int bb=MyStream.Read(aa,0,aa.Length);
string Message=System.Text.Encoding.GetEncoding("GB2312").GetString(aa,0,bb);
在不行试试
string Message = System.Text.Encoding.UTF8.GetString(aa, 0, bb);