分页: 1 / 2

linux如何判断一个字符的编码格式??????

发表于 : 2009-02-12 9:29
weihua2008
如题,假设给你一个字符数组
char a[]="abc";
在它的编码中gb2312和utf-8都一样
,该如何判断它到底是gb2312还是utf-8哪????????????????????????

Re: linux如何判断一个字符的编码格式??????

发表于 : 2009-02-12 9:49
ibear
ascii字符在单字节编码和多字节编码中都是一样的,一个字节;在utf16中,用两个字节ascii码+0x00

Re: linux如何判断一个字符的编码格式??????

发表于 : 2009-02-12 9:52
eexpress
不如看enca的源码

Re: linux如何判断一个字符的编码格式??????

发表于 : 2009-02-12 13:51
BigSnake.NET
在它的编码中gb2312和utf-8都一样
所以可能为gb,也可能为utf-8

Re: linux如何判断一个字符的编码格式??????

发表于 : 2009-02-12 15:20
weihua2008
BigSnake.NET,
不会吧,要是又汉字就不一样了是不是?

Re: linux如何判断一个字符的编码格式??????

发表于 : 2009-02-12 15:21
BigSnake.NET
weihua2008 写了:BigSnake.NET,
不会吧,要是又汉字就不一样了是不是?
问题是你这里没有汉字

Re: linux如何判断一个字符的编码格式??????

发表于 : 2009-02-12 15:45
poet
weihua2008 写了:如题,假设给你一个字符数组
char a[]="abc";
在它的编码中gb2312和utf-8都一样
,该如何判断它到底是gb2312还是utf-8哪????????????????????????
对任意一个字符而言,并没有编码格式的概念。同样的一个字母,在不同编码集里面代表不同的东西,当然也有可能恰好代表相同的东西。

编码集并不是文本本身的属性,而是观察者的角度,也就是说你用什么编码集来观察这段文本。——从程序的角度就是,你用什么软件去打开它。——编码识别大多通过非法字符进行识别,也就是说仅仅当我们判断具有非法的utf-8字符序列的时候,我们判断一个文本“不是utf-8”编码,但是我们永远无法判断一个文本“是utf-8编码”。——如果不包含任何非法字符,那么你就可以用任何编码去查看他:

例如“逍遥”如果使用BIG5码,但你还是可以使用GBK码查看这两个字,最后得到的是“殊换”。显然这两个词都是合法的,如果仅仅给你这个词,那么你无论从理论还是实际上都不可能知道原文的作者究竟是想表达“逍遥”还是“殊换“。

Re: linux如何判断一个字符的编码格式??????

发表于 : 2009-02-12 16:06
weihua2008
我知道了,还有poet
你说的在windows下查看.odt的编辑器是什么来着???

Re: linux如何判断一个字符的编码格式??????

发表于 : 2009-02-12 16:06
BigSnake.NET
openoffice

Re: linux如何判断一个字符的编码格式??????

发表于 : 2009-02-12 16:27
weihua2008
BigSnake.NET,
大蛇,我要发送文件的时候,要指明文件的类型(看是文件还是一般的文本消息),文件的名称
文件的路径(这个在发送文件夹时有可能有用),还有文件的内容
要定义成结构的话
struct tagContext
{
int nFileType;//数据类型
char strFileName[100];//文件名
char strDirName[256];//路径名
char strBuff[1024];//存放数据数组
int nstrLen;//数据长度
};
这样将整个结构体发送出去,显得发送数据非常浮肿,有没有好的打包方式阿
有人说就用一个数组char strContext[1024];
前几个字节表示文件类型,再有几个字节表示文件名,路径名,再到数据长度,最后是数据
后面的凡是我感觉不好把握。给选择别解释一下,哪种好,
主要还是,第二种方式的实现问题

Re: linux如何判断一个字符的编码格式??????

发表于 : 2009-02-12 16:59
BigSnake.NET
weihua2008 写了:BigSnake.NET,
大蛇,我要发送文件的时候,要指明文件的类型(看是文件还是一般的文本消息),文件的名称
文件的路径(这个在发送文件夹时有可能有用),还有文件的内容
要定义成结构的话
struct tagContext
{
int nFileType;//数据类型
char strFileName[100];//文件名
char strDirName[256];//路径名
char strBuff[1024];//存放数据数组
int nstrLen;//数据长度
};
这样将整个结构体发送出去,显得发送数据非常浮肿,有没有好的打包方式阿
有人说就用一个数组char strContext[1024];
前几个字节表示文件类型,再有几个字节表示文件名,路径名,再到数据长度,最后是数据
后面的凡是我感觉不好把握。给选择别解释一下,哪种好,
主要还是,第二种方式的实现问题
你先调用个什么东西对文件夹打包变成字节流..
然后发送这个字节流不就行了嘛..

Re: linux如何判断一个字符的编码格式??????

发表于 : 2009-02-12 18:51
poet
weihua2008 写了:我知道了,还有poet
你说的在windows下查看.odt的编辑器是什么来着???
http://download.openoffice.org/other.html

Re: linux如何判断一个字符的编码格式??????

发表于 : 2009-02-12 21:58
weihua2008
BigSnake.NET,
你说得不太清楚啊,不是应该说,我的理解有点差,
撒个先将文件夹打包啊?
烦你再说清楚点

Re: linux如何判断一个字符的编码格式??????

发表于 : 2009-02-12 22:00
weihua2008
poet,
你对我的发生文件的问题,在10楼提出的,有没有好的建议
不妨说说

Re: linux如何判断一个字符的编码格式??????

发表于 : 2009-02-12 23:25
poet
weihua2008 写了:BigSnake.NET,
这样将整个结构体发送出去,显得发送数据非常浮肿,有没有好的打包方式阿
有人说就用一个数组char strContext[1024];
前几个字节表示文件类型,再有几个字节表示文件名,路径名,再到数据长度,最后是数据
后面的凡是我感觉不好把握。给选择别解释一下,哪种好,
主要还是,第二种方式的实现问题
你这种需求最好不要用结构,用整体字节流比较好。因为4个字段的长度都是不确定的。另外先提醒你一下,这个1024不太够。光一个路径名就要1024,最好这里给4096。

至于其分隔方法,你正好练习一下字符串处理。一般这里用 '\0' 字符分隔就可以了。

其实这个不是好不好实现的问题,是你第一种方法根本不能满足要求,实际调试时会出很多问题。