社区
C#
帖子详情
Socket传送文件发生乱码
mizuho_2006
2012-09-27 10:19:27
传送中文字符的文本文档都没问题,但是包含日文的txt文件就会变成乱码。txt文件是UTF-8编码的,在接收时也用的UTF-8编码,怎么会出现乱码呢?
还有一个问题,在接收到文件提示另存的时候,不知道文件的文件名和扩展名,这些信息是不是要通过客户端发送数据时一起转换为2进制数据发过来服务端才能识别?
...全文
301
15
打赏
收藏
Socket传送文件发生乱码
传送中文字符的文本文档都没问题,但是包含日文的txt文件就会变成乱码。txt文件是UTF-8编码的,在接收时也用的UTF-8编码,怎么会出现乱码呢? 还有一个问题,在接收到文件提示另存的时候,不知道文件的文件名和扩展名,这些信息是不是要通过客户端发送数据时一起转换为2进制数据发过来服务端才能识别?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ggewt2td
2012-10-01
打赏
举报
回复
在网站开发中,用Base64模拟二进制。
ggewt2td
2012-10-01
打赏
举报
回复
[Quote=引用 13 楼 的回复:]
在普通的信令中如果要传送byte[]类型的字段,通常用base64编码来承载byte[](也就是说是使用string而不是byte[]来定义实体类中的字段类型)。
很少情况下,可能需要单独开一个端口(例如80端口)专门用于传送二进制短连接的数据。
[/Quote]
HTTP协议不能直接传二进制,所以才用 Base64 模拟二进制。
Socket可以直接传二进制,就不用Base64了
以专业开发人员为伍
2012-09-29
打赏
举报
回复
在普通的信令中如果要传送byte[]类型的字段,通常用base64编码来承载byte[](也就是说是使用string而不是byte[]来定义实体类中的字段类型)。
很少情况下,可能需要单独开一个端口(例如80端口)专门用于传送二进制短连接的数据。
以专业开发人员为伍
2012-09-29
打赏
举报
回复
关于第二个问题,我以前回答过一个帖子请参见:
http://topic.csdn.net/u/20120705/01/dc56fc56-ba4c-487a-a43e-c44b31bd1ac4.html?seed=27852526&r=79044777
基本概念是,任何专业的通讯程序都是要自己设计信令协议的。不管用什么方式、效率怎样,总之是需要让一个服务端口能够解析十几种甚至上百种命令格式。如果你看到的某个网络程序的demo它只能解析一种信令数据,那么这就是糊弄小孩子的demo程序。
以专业开发人员为伍
2012-09-29
打赏
举报
回复
[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必然出错,我干过几个对日项目。
Web框架、Web框架的本质(
socket
)以及自定义Web框架
本文探讨了Web框架的定义,指出其本质是一个基于
socket
的服务端,通过示例解释了自定义Web框架的基本步骤,包括服务器端和客户端的套接字编程流程。文章还涉及了解决浏览器中文
乱码
问题、根据URL路径返回不同内容的实现,并讨论了如何返回HTML
文件
和实现动态网页的方法。
socket
实现C#和Java之间的通信
本文详细介绍了
Socket
通信的基础原理,包括TCP的三次握手建立连接和四次挥手断开连接的过程。并通过C#客户端与Java服务端的实际代码示例,演示了如何在不同编程语言间实现文本和图片的数据传输。
TCP
Socket
套接字 和 粘包问题
本文深入探讨了
Socket
编程的基础知识,包括TCP协议的特性、
Socket
的工作原理、解决通信循环问题的策略,以及TCP粘包现象的产生原因与解决方案。通过具体代码示例,详细介绍了服务端与客户端的交互过程。
Android中基于TCP协议的网络通信之使用
Socket
进行通信
本文介绍如何在Java服务器端和Android客户端之间实现通信,通过使用Server
Socket
和
Socket
类,演示了从创建连接到数据交换的全过程。包括服务器端监听客户端连接、发送消息及客户端接收消息的实现,特别注意了跨平台编码问题。
HTTP与
Socket
本文深入解析HTTP与HTTPS协议的工作原理,对比两种协议的区别,重点介绍HTTPS的安全机制,以及请求和响应过程中的关键字段,如Cookie、Session、状态码等。
C#
111,129
社区成员
642,535
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章