求UTF-8向gb2312转换函数

软件和网站开发以及相关技术探讨
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

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

#16

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

不知道撒回事,测试过,确实打开了,确实读取了,就是写不出来,写到文件中,该文件用了常见的好几种编码格式,都打不开。更别说想复制了,想一模一样了
怎么个写不出来.. 你不是说写在文件里面了嘛
当然如果你用 记事本 打开 odt 文件, 肯定是一堆乱码..
^_^ ~~~
要理解递归,首先要理解递归。

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

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

#17

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

poet,
我好像明白了
你说的是,发送消息,本身没有错误,出错也只是,windows下没有象linux下一样的编辑器,是吧?

我的第一错觉来自,我向windows发送了一个test.cpp文件,在windows"复制""出了test.cpp
我就用vc6.0打开,结果出现了汉字的乱码。
发送了个test.txt在windows下用txt文本打开,汉字正常格式就是有点不对。

假若我非要这种"感官上的"一样有没有办法???
就像我发送了test.cpp在windows的vc6.0中,如何将汉字正常显示

假若我要发送一个"魏华.cpp"能实现吗?该如何是好??
weihua2008
帖子: 448
注册时间: 2008-07-10 15:08

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

#18

帖子 weihua2008 » 2009-02-12 15:00

BigSnake.NET,
我现在就测试,用.odt打开
weihua2008
帖子: 448
注册时间: 2008-07-10 15:08

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

#19

帖子 weihua2008 » 2009-02-12 15:09

我在linux下的test.cpp到windows下的vc6.0中出现中文乱码,这点”硬伤“有治吗
poet
帖子: 2841
注册时间: 2006-09-11 22:47

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

#20

帖子 poet » 2009-02-12 15:23

weihua2008 写了:我测试过,在linux方,我先将要发送的信息,转换它的编码为gb2312后,再发送,在接收方,就没有乱码出现了
所以想在linux方做转化,就是向外发送数据前,由utf-8转换成gb2312,在接收数据后的第一操作就是,将gb2312转换成utf-8
我这样测试了,确实没有问题了。似乎解决了问题
首先你必须明白一个问题:假设你是聊天工具的话,你究竟正在发送即使消息,还是发送文件?

对于及时消息来说,很简单,因为它一定是字节流,而它在Linux下一定是utf-8。

如果你指的是发送文件的话,你要做的是下面:

1。首先确定这个文件是什么类型的文件,是纯文本文件呢?还是专有格式的文件。通常来说,你可以使用 file 命令查看。
2。对于纯文本文件来说,你需要知道它现在是什么编码,然后再转换成你所需要的GBK编码。但是请注意:目前为止没有任何一种算法能够100%可靠的检测编码,最好的成绩也只有80%。自动的检测所有编码不论从理论还是实践上来说都是不可行的。
3。对于专有格式文件来说,你要确定是不是一种所需要看的文件,例如一个可执行程序或者动态链接库,你怎么看都没用,Linux版的你无论什么办法都不可能放到 windows 里面用。专有格式有成千上万中,而你如果只是要处理odt的话,你最好的办法是在windows下也使用相同的程序openoffice打开,如果不能保证这一点,你需要使用工具把这个专有格式转换成另外一种格式。例如odt可以转换成txt或者doc之类的,然后呢? 如果你把odt转换成 txt 的话,需要重复第二步骤,如果转换成 doc 的话,理论上你可以直接发送的,是不?


关于检测编码的问题,的确,任何现有算法都不可能可靠检测,但是我们可以通过制定一个规则来增加识别率。——例如,如果我规定,所有文件的编码不是utf-8就是gbk,这相对会容易一些,你可以先检测该编码“是否符合utf-8规则“,然后把符合的转换,不符合的就不理睬。——不过即使这样也无法保证100%有效。只能说应付大多数情形。
poet
帖子: 2841
注册时间: 2006-09-11 22:47

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

#21

帖子 poet » 2009-02-12 15:33

给你搞了个使用 file 进行检测的例子:

$ file *.c
btser.c: ASCII C program text
handsfree.c: ASCII C program text
hfmain.c: ASCII C program text
listwin.c: UTF-8 Unicode C program text
main.c: ISO-8859 C program text

这里有五个文件,
前三个文件用ASCII标出,表明其不包含中文字符。
第四个文件是 utf-8 格式的。
第五个文件不是 utf-8 格式,但却包含非ASCII字符,它可能是GBK,也可能是其它的类型,我们不清楚它究竟是不是 gbk ,我们可以忽略它。

完全感官性传输文件的话,你要做的事情还很多。你自己使用 file 多测试几个文件就明白了。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

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

#22

帖子 eexpress » 2009-02-12 15:36

说了用enca看编码呢。这lz估计把大家都搞晕了吧。
● 鸣学
weihua2008
帖子: 448
注册时间: 2008-07-10 15:08

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

#23

帖子 weihua2008 » 2009-02-12 15:43

(1)我的意图不是即时聊天,是单纯的文件传输,就是linux和windows的底层数据传输,
就是通过基于TCP/IP的socket实现数据传输
,较复杂就是文件夹和文件的传输,因为设计到数据打包,路径从遍历,等等
(2)到现在我的想法跟你 是一样的,要想实现所有的编码识别是不可能的,要是只有utf-8和gb2312就好了
但是事实又并非如此,linux下就有好几种编码格式
(3)是 的,在linux下的隐藏文件和可执行程序,估计都传不过去

那现在我只有简单的"复制"了,至于出现不出现乱码,已管不了这么多了,有乱码只能归咎为没有合适的阅读器!!!!!!
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

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

#24

帖子 BigSnake.NET » 2009-02-12 15:46

weihua2008 写了:(1)我的意图不是即时聊天,是单纯的文件传输,就是linux和windows的底层数据传输,
就是通过基于TCP/IP的socket实现数据传输
,较复杂就是文件夹和文件的传输,因为设计到数据打包,路径从遍历,等等
(2)到现在我的想法跟你 是一样的,要想实现所有的编码识别是不可能的,要是只有utf-8和gb2312就好了
但是事实又并非如此,linux下就有好几种编码格式
(3)是 的,在linux下的隐藏文件和可执行程序,估计都传不过去

那现在我只有简单的"复制"了,至于出现不出现乱码,已管不了这么多了,有乱码只能归咎为没有合适的阅读器!!!!!!
既然是单纯的文件传输, 那你就不用管文件内容(结构,编码)了
那现在我只有简单的"复制"了,至于出现不出现乱码,已管不了这么多了,有乱码只能归咎为没有合适的阅读器!!!!!!
本来就是这样 =.=
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
头像
lululau
帖子: 105
注册时间: 2007-05-28 11:17

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

#25

帖子 lululau » 2009-02-20 22:00

用libiconv,具体使用方法到它网站上找
GB2312转UTF-8没问题
但是不是所有的UTF-8字符都能转成GB2312
weihua2008
帖子: 448
注册时间: 2008-07-10 15:08

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

#26

帖子 weihua2008 » 2009-02-21 21:59

这个说不准,需要测试
回复