求UTF-8向gb2312转换函数

C、C++和Java语言
weihua2008
帖子: 448
注册时间: 2008-07-10 15:08
送出感谢: 0
接收感谢: 0
联系:

求UTF-8向gb2312转换函数

#1

帖子 weihua2008 » 2009-02-11 9:12

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

Re: 求UTF-8向gb2312转换函数

#2

帖子 weihua2008 » 2009-02-12 9:26

ol
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙
送出感谢: 4 次
接收感谢: 256 次

Re: 求UTF-8向gb2312转换函数

#3

帖子 eexpress » 2009-02-12 9:28

gb2312,系统不支持了的。
至少GBK吧。那convmv. enca都可以
● 鸣学
weihua2008
帖子: 448
注册时间: 2008-07-10 15:08
送出感谢: 0
接收感谢: 0
联系:

Re: 求UTF-8向gb2312转换函数

#4

帖子 weihua2008 » 2009-02-12 13:53

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"一模一样的东西(不能出现乱码)
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
送出感谢: 0
接收感谢: 7 次
联系:

Re: 求UTF-8向gb2312转换函数

#5

帖子 BigSnake.NET » 2009-02-12 14:06

socket 发送的只是位流, 你要先规定你的消息转化成位流的方式
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
poet
帖子: 2841
注册时间: 2006-09-11 22:47
送出感谢: 0
接收感谢: 4 次

Re: 求UTF-8向gb2312转换函数

#6

帖子 poet » 2009-02-12 14:07

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 次。
weihua2008
帖子: 448
注册时间: 2008-07-10 15:08
送出感谢: 0
接收感谢: 0
联系:

Re: 求UTF-8向gb2312转换函数

#7

帖子 weihua2008 » 2009-02-12 14:17

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

Re: 求UTF-8向gb2312转换函数

#8

帖子 BigSnake.NET » 2009-02-12 14:21

weihua2008 写了:poet, BigSnake.NET,
二位,我有幸的话,希望咱们能成为朋友
我的qq957863054
大蛇说的我感觉还是很有道理的,就是不知道 如何设置这种方式那?
你得再给说说
首先从你这句话说起
简单的说就是:我在linux下有一个文件"a",想办法通过socket将该文件"复制"到windows下,在windows下"黏贴出"一个与"a"一模一样的东西(不能出现乱码)
你的"一模一样"是什么意思? 如果是文件的复制粘贴, 那么直接一头 send, 另一头 recv 就可以了.
那个乱码是另一回事. 实际上即使是同一个文件, 在 Linux 打开是不乱码的, 在 WIndows 打开也可能是乱码的, 因为两个编辑器对文件字节流的理解不同, 而不是文件在传输过程中变化了

你首先要搞清楚你处理的是什么, 是字节流还是中文信息
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
weihua2008
帖子: 448
注册时间: 2008-07-10 15:08
送出感谢: 0
接收感谢: 0
联系:

Re: 求UTF-8向gb2312转换函数

#9

帖子 weihua2008 » 2009-02-12 14:26

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还不能测试出文件的编码方式.
weihua2008
帖子: 448
注册时间: 2008-07-10 15:08
送出感谢: 0
接收感谢: 0
联系:

Re: 求UTF-8向gb2312转换函数

#10

帖子 weihua2008 » 2009-02-12 14:36

BigSnake.NET,
这个我知道,我的在linux下的文本,是,放到windows下显示乱码(对于中文汉字)

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

安你说的应该是乱码的问题,中文乱码的问题
我的意思是在感官上给人的感觉就是linux下a.txt的"复制品"。
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
送出感谢: 0
接收感谢: 7 次
联系:

Re: 求UTF-8向gb2312转换函数

#11

帖子 BigSnake.NET » 2009-02-12 14:40

weihua2008 写了:BigSnake.NET,
这个我知道,我的在linux下的文本,是,放到windows下显示乱码(对于中文汉字)

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

安你说的应该是乱码的问题,中文乱码的问题
我的意思是在感官上给人的感觉就是linux下a.txt的"复制品"。
你这个"感官上"就不够精确了. 因为每个人的理解都是不同的. 有的人认为字节流相同叫做复制品, 有的人认为我在windows下用 notepad 打开和在 linux 下用 gedit 打开显示出相同的文字叫做"复制品"
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
poet
帖子: 2841
注册时间: 2006-09-11 22:47
送出感谢: 0
接收感谢: 4 次

Re: 求UTF-8向gb2312转换函数

#12

帖子 poet » 2009-02-12 14:46

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 下也同样无法正常查看这个文件,这并没有什么问题。

——你到底是要改变,还是不要改变你传过去的文件呢?
weihua2008
帖子: 448
注册时间: 2008-07-10 15:08
送出感谢: 0
接收感谢: 0
联系:

Re: 求UTF-8向gb2312转换函数

#13

帖子 weihua2008 » 2009-02-12 14:48

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

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

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

其中还有一个问题,就是.odt格式的文件,我打开,读取后,写不出来,
不知道撒回事,测试过,确实打开了,确实读取了,就是写不出来,写到文件中,该文件用了常见的好几种编码格式,都打不开。更别说想复制了,想一模一样了
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
送出感谢: 0
接收感谢: 7 次
联系:

Re: 求UTF-8向gb2312转换函数

#14

帖子 BigSnake.NET » 2009-02-12 14:54

到现在我自己都已经违规和崩溃了。
:em04 :em04 :em04 :em04 :em04 :em04 :em04
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
送出感谢: 0
接收感谢: 7 次
联系:

Re: 求UTF-8向gb2312转换函数

#15

帖子 BigSnake.NET » 2009-02-12 14:56

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

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

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

其中还有一个问题,就是.odt格式的文件,我打开,读取后,写不出来,
不知道撒回事,测试过,确实打开了,确实读取了,就是写不出来,写到文件中,该文件用了常见的好几种编码格式,都打不开。更别说想复制了,想一模一样了
如果你是想"复制", 就好像复制粘贴文件那种, 那根本不用做任何转换, socket 不会修改字节流
^_^ ~~~
要理解递归,首先要理解递归。

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

回到 “C/C++/Java”