当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 26 篇帖子 ]  前往页数 1, 2  下一页
作者 内容
1 楼 
 文章标题 : 求UTF-8向gb2312转换函数
帖子发表于 : 2009-02-11 9:12 

注册: 2008-07-10 15:08
帖子: 448
送出感谢: 0 次
接收感谢: 0 次
因为在linux下向windows经由socket传递消息,汉字往往出现乱码,
有没有好的办法,
有的说在linux下将gb2312转换成UTF-8,在windows下将UTF-8转换成gb2312
但是我好像有点摸不着头脑
给想想办法


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 求UTF-8向gb2312转换函数
帖子发表于 : 2009-02-12 9:26 

注册: 2008-07-10 15:08
帖子: 448
送出感谢: 0 次
接收感谢: 0 次
ol


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 求UTF-8向gb2312转换函数
帖子发表于 : 2009-02-12 9:28 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
gb2312,系统不支持了的。
至少GBK吧。那convmv. enca都可以


_________________
● 鸣学


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 求UTF-8向gb2312转换函数
帖子发表于 : 2009-02-12 13:53 

注册: 2008-07-10 15:08
帖子: 448
送出感谢: 0 次
接收感谢: 0 次
eexpress,
你的意思是?????
不支持,是说gb2312编码类型的文本在linux不能识别??还是已经过时了??/


正如我开始说的,我想要实现windows和linux 的通讯,现在是想经过socket发送信息
开始测试是,相互发送带有中文的 信息,接收方都会出现乱码,
于是我想在linux在信息发送前,将信息转换成gb2312或者你说的GBK编码形式,然后发送信息(windows接收到信息后便可以识别);同理在linux接收到信息后,先将信息的编码由gb2312(GBK)转换成utf-8,然后再对数据做进一步的操作

现在又出现了新的问题,linux下的编码不只是一种,因为我向windows发送有可能读取linux的"某个文件",然后将读取到的信息发送给windows,这某个文件的编码事先可是不知道,我现在想
用什么函数来判断文件的编码格式,当然你说用enca可以,也未必都使用比如说(.odt格式文件),就测试不出它的编码格式
况且,我的测试不能手动测试,要把这个函数嵌套到我读取数据的函数中去,

现在我的假定我的意图:是将linux下的某个文件(文件的格式不确定.c/.cpp/.txt/odt等等),经由socket发送给windows
然后在windows下要创建一个同名的文件,并将接受到的属于该文件的文本,都写入该文件(要避免由于文本编码不同而出现的乱码现象)

简单的说就是:我在linux下有一个文件"a",想办法通过socket将该文件"复制"到windows下,在windows下"黏贴出"一个与"a"一模一样的东西(不能出现乱码)


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 求UTF-8向gb2312转换函数
帖子发表于 : 2009-02-12 14:06 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
socket 发送的只是位流, 你要先规定你的消息转化成位流的方式


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 求UTF-8向gb2312转换函数
帖子发表于 : 2009-02-12 14:07 

注册: 2006-09-11 22:47
帖子: 2841
送出感谢: 0 次
接收感谢: 4
weihua2008 写道:
因为在linux下向windows经由socket传递消息,汉字往往出现乱码,
有没有好的办法,
有的说在linux下将gb2312转换成UTF-8,在windows下将UTF-8转换成gb2312
但是我好像有点摸不着头脑
给想想办法


汉字出现乱码,并不是在你传输的过程中出现的。而是在 Windows 显示的过程中出现的。所以你会不理解。

Windows 内置的多数程序并不能正确识别不带 bom 的 utf-8 。而不带 bom 的 utf-8 是 Linux 的标准文本文件格式。

所以你要解决乱码问题,最简单的办法是让你的 Windows 程序支持不带 bom 的 utf-8。从 Linux 这边想办法比较麻烦。


最后由 poet 编辑于 2009-02-12 14:36,总共编辑了 1 次

页首
 用户资料  
 
7 楼 
 文章标题 : Re: 求UTF-8向gb2312转换函数
帖子发表于 : 2009-02-12 14:17 

注册: 2008-07-10 15:08
帖子: 448
送出感谢: 0 次
接收感谢: 0 次
poet, BigSnake.NET,
二位,我有幸的话,希望咱们能成为朋友
我的qq957863054
大蛇说的我感觉还是很有道理的,就是不知道 如何设置这种方式那?
你得再给说说


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 求UTF-8向gb2312转换函数
帖子发表于 : 2009-02-12 14:21 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
weihua2008 写道:
poet, BigSnake.NET,
二位,我有幸的话,希望咱们能成为朋友
我的qq957863054
大蛇说的我感觉还是很有道理的,就是不知道 如何设置这种方式那?
你得再给说说


首先从你这句话说起

引用:
简单的说就是:我在linux下有一个文件"a",想办法通过socket将该文件"复制"到windows下,在windows下"黏贴出"一个与"a"一模一样的东西(不能出现乱码)


你的"一模一样"是什么意思? 如果是文件的复制粘贴, 那么直接一头 send, 另一头 recv 就可以了.
那个乱码是另一回事. 实际上即使是同一个文件, 在 Linux 打开是不乱码的, 在 WIndows 打开也可能是乱码的, 因为两个编辑器对文件字节流的理解不同, 而不是文件在传输过程中变化了

你首先要搞清楚你处理的是什么, 是字节流还是中文信息


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
9 楼 
 文章标题 : Re: 求UTF-8向gb2312转换函数
帖子发表于 : 2009-02-12 14:26 

注册: 2008-07-10 15:08
帖子: 448
送出感谢: 0 次
接收感谢: 0 次
poet,
你说的我接受,但是不是我最最想要的,
我的意思就是要windows同linux通讯,就是想把linux下的一个a.txt通过socket发送给windows
结果就应该是,在windows下,平地给创建出一个a.txt的副本,并且,里边的内容一致,不能出现乱码

我已经实现了基本的功能,就差一步,就是若linux下的a.txt中有中文的话,在windows下a.txt出现乱码,不能识别linux下的汉字,

还有就是,在linux下的.odt文件用dopen,fread,fwrite后,printf不出来,写到一个文件中,这个文件在linux就是打不开,用了好几种编码方式,就是打不开,用enca还不能测试出文件的编码方式.


页首
 用户资料  
 
10 楼 
 文章标题 : Re: 求UTF-8向gb2312转换函数
帖子发表于 : 2009-02-12 14:36 

注册: 2008-07-10 15:08
帖子: 448
送出感谢: 0 次
接收感谢: 0 次
BigSnake.NET,
这个我知道,我的在linux下的文本,是,放到windows下显示乱码(对于中文汉字)

看起来是两码事,但我感觉还是一码事,首先你要通过socket发送文件的名称等信息,在windows方接收到该信息后,才能创建文件名a.txt.那我的文件名要是"魏华.txt"哪?是不是得处理收到的数据阿

安你说的应该是乱码的问题,中文乱码的问题
我的意思是在感官上给人的感觉就是linux下a.txt的"复制品"。


页首
 用户资料  
 
11 楼 
 文章标题 : Re: 求UTF-8向gb2312转换函数
帖子发表于 : 2009-02-12 14:40 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
weihua2008 写道:
BigSnake.NET,
这个我知道,我的在linux下的文本,是,放到windows下显示乱码(对于中文汉字)

看起来是两码事,但我感觉还是一码事,首先你要通过socket发送文件的名称等信息,在windows方接收到该信息后,才能创建文件名a.txt.那我的文件名要是"魏华.txt"哪?是不是得处理收到的数据阿

安你说的应该是乱码的问题,中文乱码的问题
我的意思是在感官上给人的感觉就是linux下a.txt的"复制品"。


你这个"感官上"就不够精确了. 因为每个人的理解都是不同的. 有的人认为字节流相同叫做复制品, 有的人认为我在windows下用 notepad 打开和在 linux 下用 gedit 打开显示出相同的文字叫做"复制品"


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
12 楼 
 文章标题 : Re: 求UTF-8向gb2312转换函数
帖子发表于 : 2009-02-12 14:46 

注册: 2006-09-11 22:47
帖子: 2841
送出感谢: 0 次
接收感谢: 4
weihua2008 写道:
poet,
你说的我接受,但是不是我最最想要的,
我的意思就是要windows同linux通讯,就是想把linux下的一个a.txt通过socket发送给windows
结果就应该是,在windows下,平地给创建出一个a.txt的副本,并且,里边的内容一致,不能出现乱码


这个问题我想首先我告诉你,你的程序没有问题,传过去的字符里面就是一致的,文本文件丝毫没变,首先你必须清楚这个问题。

至于你看到乱码,并不是因为文件被改变了,而是因为你用于查看的程序不同。你可以在windows 下安装一个 gvim 看看你传过去的 .txt 文件是否能正常显示,我会告诉你那肯定是正常的。

我们假定你在windows下使用 记事本打开该文件,那么你的问题实质上就变成了:用 gvim 能正常查看的txt文件,为什么用记事本打开是乱码?——这个问题纯粹变成了一个 windows 问题,与你的文件传输完全没有关系。

至于那个 odt 也是一样的。我们假定你在Linux下是使用 openoffice打开正常,但是在windows 下面呢?如果你在windows下面安装一个 openoffice,我可以肯定你同样可以正常打开这个文件,但是你在windows下又试图用记事本打开,于是也不行。

当然这里的“记事本”只是一个例子,实际你可以把“记事本”这个名词换成其它的程序。如果你疑惑你的“记事本”在windows下无法正常查看某个文件,那么你同样的记事本在 Linux 下也同样无法正常查看这个文件,这并没有什么问题。

——你到底是要改变,还是不要改变你传过去的文件呢?


页首
 用户资料  
 
13 楼 
 文章标题 : Re: 求UTF-8向gb2312转换函数
帖子发表于 : 2009-02-12 14:48 

注册: 2008-07-10 15:08
帖子: 448
送出感谢: 0 次
接收感谢: 0 次
我测试过,在linux方,我先将要发送的信息,转换它的编码为gb2312后,再发送,在接收方,就没有乱码出现了
所以想在linux方做转化,就是向外发送数据前,由utf-8转换成gb2312,在接收数据后的第一操作就是,将gb2312转换成utf-8
我这样测试了,确实没有问题了。似乎解决了问题

后来发现,发现这是建立在这样的假设条件上的:我要发送的数据必须是utf-8编码格式,接收的数据必须是gb2312编码格式,假若有一方"违规",就会""崩溃""

到现在我自己都已经违规和崩溃了。这种方法不可取。

其中还有一个问题,就是.odt格式的文件,我打开,读取后,写不出来,
不知道撒回事,测试过,确实打开了,确实读取了,就是写不出来,写到文件中,该文件用了常见的好几种编码格式,都打不开。更别说想复制了,想一模一样了


页首
 用户资料  
 
14 楼 
 文章标题 : Re: 求UTF-8向gb2312转换函数
帖子发表于 : 2009-02-12 14:54 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
引用:
到现在我自己都已经违规和崩溃了。


:em04 :em04 :em04 :em04 :em04 :em04 :em04


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
15 楼 
 文章标题 : Re: 求UTF-8向gb2312转换函数
帖子发表于 : 2009-02-12 14:56 
头像

注册: 2006-07-02 11:16
帖子: 12522
地址: 廣州
送出感谢: 0 次
接收感谢: 8
weihua2008 写道:
我测试过,在linux方,我先将要发送的信息,转换它的编码为gb2312后,再发送,在接收方,就没有乱码出现了
所以想在linux方做转化,就是向外发送数据前,由utf-8转换成gb2312,在接收数据后的第一操作就是,将gb2312转换成utf-8
我这样测试了,确实没有问题了。似乎解决了问题

后来发现,发现这是建立在这样的假设条件上的:我要发送的数据必须是utf-8编码格式,接收的数据必须是gb2312编码格式,假若有一方"违规",就会""崩溃""

到现在我自己都已经违规和崩溃了。这种方法不可取。

其中还有一个问题,就是.odt格式的文件,我打开,读取后,写不出来,
不知道撒回事,测试过,确实打开了,确实读取了,就是写不出来,写到文件中,该文件用了常见的好几种编码格式,都打不开。更别说想复制了,想一模一样了


如果你是想"复制", 就好像复制粘贴文件那种, 那根本不用做任何转换, socket 不会修改字节流


_________________
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 26 篇帖子 ]  前往页数 1, 2  下一页

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译