Socket传送文件发生乱码

mizuho_2006 2012-09-27 10:19:27
传送中文字符的文本文档都没问题,但是包含日文的txt文件就会变成乱码。txt文件是UTF-8编码的,在接收时也用的UTF-8编码,怎么会出现乱码呢?

还有一个问题,在接收到文件提示另存的时候,不知道文件的文件名和扩展名,这些信息是不是要通过客户端发送数据时一起转换为2进制数据发过来服务端才能识别?
...全文
253 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ggewt2td 2012-10-01
  • 打赏
  • 举报
回复
在网站开发中,用Base64模拟二进制。
ggewt2td 2012-10-01
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]
在普通的信令中如果要传送byte[]类型的字段,通常用base64编码来承载byte[](也就是说是使用string而不是byte[]来定义实体类中的字段类型)。

很少情况下,可能需要单独开一个端口(例如80端口)专门用于传送二进制短连接的数据。
[/Quote]

HTTP协议不能直接传二进制,所以才用 Base64 模拟二进制。
Socket可以直接传二进制,就不用Base64了
  • 打赏
  • 举报
回复
在普通的信令中如果要传送byte[]类型的字段,通常用base64编码来承载byte[](也就是说是使用string而不是byte[]来定义实体类中的字段类型)。

很少情况下,可能需要单独开一个端口(例如80端口)专门用于传送二进制短连接的数据。
  • 打赏
  • 举报
回复
关于第二个问题,我以前回答过一个帖子请参见:http://topic.csdn.net/u/20120705/01/dc56fc56-ba4c-487a-a43e-c44b31bd1ac4.html?seed=27852526&r=79044777

基本概念是,任何专业的通讯程序都是要自己设计信令协议的。不管用什么方式、效率怎样,总之是需要让一个服务端口能够解析十几种甚至上百种命令格式。如果你看到的某个网络程序的demo它只能解析一种信令数据,那么这就是糊弄小孩子的demo程序。
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
传送中文字符的文本文档都没问题,但是包含日文的txt文件就会变成乱码。txt文件是UTF-8编码的,在接收时也用的UTF-8编码,怎么会出现乱码呢?

还有一个问题,在接收到文件提示另存的时候,不知道文件的文件名和扩展名,这些信息是不是要通过客户端发送数据时一起转换为2进制数据发过来服务端才能识别?
[/Quote]

utf8没有问题。不知道你是怎么传送、怎么接收的,不知道接收时做了什么不应该有的额外动作。

不过对于文件来说,使用什么字符串编码毫无意义!你就按照byte[]方式读取文件,然后按照byte[]方式打包发送消息就行了。整个过程中不要纠结什么字符串编码问题,因为根本就跟字符串没有关系。你就当作是一个图片文件被传送好了!
mizuho_2006 2012-09-29
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
日文不能用UTF-8,这点没错,至于用什么我忘记了,你用UTF-8……
[/Quote]

那该用什么?如果用日文特有的编码,别的语言不是不能正常显示了?
mizuho_2006 2012-09-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
不同语言编码方法不同 不能用一个编码 需要转码
[/Quote]

UTF-8不是通用的编码吗?
mizuho_2006 2012-09-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
或者是不是你的客户端电脑上没有日文字符集?
[/Quote]

不会的,我电脑上用日语输入法,经常打日语,显示也正常。
myrroom 2012-09-28
  • 打赏
  • 举报
回复
或者是不是你的客户端电脑上没有日文字符集?
wangzhonglong456 2012-09-28
  • 打赏
  • 举报
回复
不同语言编码方法不同 不能用一个编码 需要转码
myrroom 2012-09-28
  • 打赏
  • 举报
回复
只要全部统一编码,应该就不会有这种情况吧
读取,发送,接收,存储
Pigeon汪 2012-09-28
  • 打赏
  • 举报
回复
日文的好像不能用UTF-8编码,像中文的可以用gbk编码,日文的应该也有相关的编码方式
ggewt2td 2012-09-28
  • 打赏
  • 举报
回复
全部转成字节流再传,这样无论怎么传都不会变,然后再解码
SocketUpEx 2012-09-28
  • 打赏
  • 举报
回复
日文,UTF-8 应该没有关系吧
反正用什么格式都会转成Byte[]


风吹腚腚凉 2012-09-28
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
传送中文字符的文本文档都没问题,但是包含日文的txt文件就会变成乱码。txt文件是UTF-8编码的,在接收时也用的UTF-8编码,怎么会出现乱码呢?

还有一个问题,在接收到文件提示另存的时候,不知道文件的文件名和扩展名,这些信息是不是要通过客户端发送数据时一起转换为2进制数据发过来服务端才能识别?
[/Quote]
日文不能用UTF-8,这点没错,至于用什么我忘记了,你用UTF-8必然出错,我干过几个对日项目。

110,896

社区成员

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

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

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