【编码转换问题,在线等】

zhubo_1117 2010-09-28 10:46:55
我用的是sql200,
数据库是别人用php写入的utf-8编码的数据,是这样的数据。
上图


如何在C#程序转化为正常的gb2312的编码。。


...全文
158 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
yypf2540017 2010-09-28
  • 打赏
  • 举报
回复
学习再学习
viena 2010-09-28
  • 打赏
  • 举报
回复
实际编码是UTF8,却被当作Unicode,所以才看到乱码
因为被当作Unicode,所以要按Unicode转为byte[]
再按UTF8编码转为字符串
看能否还原真实数据~
viena 2010-09-28
  • 打赏
  • 举报
回复
sorry,我写错了,应该是

你试下,直接读出来的str
Byte[] bytes = Encoding.Unicode.GetBytes(str);
以后再Encoding.UTF8.GetBytes.GetString(bytes)看得到的字符串还是不是乱码
porschev 2010-09-28
  • 打赏
  • 举报
回复
写入时没注意编码问题。。。

这不在于你取出时怎么转了。。

数据库中又不是按一定格式的编码。。。。

完全乱码。。你取出还能转成个什么
messi_yang 2010-09-28
  • 打赏
  • 举报
回复
如果數據庫中都已是亂碼的話。你再轉化也沒有效果啊
porschev 2010-09-28
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zhubosa 的回复:]
恩,数据库是乱码。
因为sql server2000数据库没有utf-8编码。
别人php(unix)插入的是按utf-8插入的。

所以导致的乱码。
[/Quote]

数据库己经是乱码了这不是取出来编码的问题了。。
这是写入数据时的编码问题
zhubo_1117 2010-09-28
  • 打赏
  • 举报
回复
试下,直接读出来的str
Byte[] bytes = Encoding.UTF8.GetBytes(str);
以后再Encoding.UTF8.GetString(bytes)看得到的字符串还是不是乱码


您这个明显就不合理啊。呵呵。。。
这个相当于没有转,
zhubo_1117 2010-09-28
  • 打赏
  • 举报
回复
恩,我试试看,主要是数据库就已经是乱码了。。。
viena 2010-09-28
  • 打赏
  • 举报
回复
这个真搞不清楚了,如果是.NET,unicode编码写入nvarchar字段是不需要编码转换直接写入的
php怎么写得就不了解了,你在数据库里直接看也是乱码?

你试下,直接读出来的str
Byte[] bytes = Encoding.UTF8.GetBytes(str);
以后再Encoding.UTF8.GetBytes.GetString(bytes)看得到的字符串还是不是乱码

zhubo_1117 2010-09-28
  • 打赏
  • 举报
回复
恩,数据库是乱码。
因为sql server2000数据库没有utf-8编码。
别人php(unix)插入的是按utf-8插入的。

所以导致的乱码。
porschev 2010-09-28
  • 打赏
  • 举报
回复
你发的这张图是数据库中己经是乱码了吗?
zhubo_1117 2010-09-28
  • 打赏
  • 举报
回复
Byte[] bytes = Encoding.UTF8.GetBytes(str);
这个的前提是str是正确的字符串(Unicode)

我的str是数据库中的类似于15房间的乱码。(utf-8的)
那按照您的意思是说,就是转不过来了?
viena 2010-09-28
  • 打赏
  • 举报
回复
nvarchar 是按unicode编码的
viena 2010-09-28
  • 打赏
  • 举报
回复
Byte[] bytes = Encoding.UTF8.GetBytes(str);
这个的前提是str是正确的字符串(Unicode)

如果你能得到正确的字符串,根本没必要再折腾什么编码了
只要直接指定输出编码就是你想要的了

可能Java或其他开发出身的,对.NET的字符串不理解
.NET中不可能有其它编码的字符串,.NET字符串的定义就是Unicode字符序列
zhubo_1117 2010-09-28
  • 打赏
  • 举报
回复
感谢viena 回复。

怎么用二进制得到byte数组,乱码字段都是nvarchar()类型的。

Byte[] bytes = Encoding.UTF8.GetBytes(str);

Stream stream = new MemoryStream(str);

StreamReader reader = new StreamReader(stream,Encoding.Default);

String t = reader.ReadToEnd();
reader.Close();
reader.Dispose();

我的方案是这样的,因为只有流,字节,文件才有编码。
网上的
Encoding.Convert(utf8,gb2312,str); 这样是不行的。

可是,为什么还是不行呢??
viena 2010-09-28
  • 打赏
  • 举报
回复
二进制方式读到byte数组,然后用utf-8编码转为字符串,.NET字符串使用Unicode编码
输出为什么编码是另外的问题了~

62,272

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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