c#的winform开发,转换utf8与gb2312

时间:2023-01-10 11:47:22
通过一个dll库,其函数a()返回string,是postgresql数据源是utf8编码,现在a()返回string是乱码,估计是编码有问题
不知道如何解决,网上搜了很多方法,都有问题,或者没有完全解决,特别是遇到中文与非中文(例如数字,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);

#7


引用 6 楼 zyloveyrf 的回复:
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……

没修改完
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);

#7


引用 6 楼 zyloveyrf 的回复:
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……

没修改完
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);