求助:如何判断字符串的编码类型并提取相应文本

fengfeiwuwq 2007-07-23 04:10:11
Windows的记事本可以将文本文件分别保存成ANSI、Unicode、Unicode Big Endian和UTF-8四种类型,但是有些从其他地方来源的文本文件有可能是这几种字符编码类型的混合使用,比如有些ANSI文本文件里面可能会出现Unicode的内容,如何判断一个文本或者字符串包括哪些编码类型,并针对这种特殊情况将不同编码类型的字符串从文本中提取出来呢?希望高手帮助解答,不胜感激
...全文
878 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Amuro1987218 2008-07-27
  • 打赏
  • 举报
回复
同楼上判断bom头
sky_tian_yun 2008-07-27
  • 打赏
  • 举报
回复
根据文件头判断:
unicode文件的前两个字节是:0xFF,0xFE
utf8文件的前三个字节是:0xEF,0xBB,0xBF
fengfeiwuwq 2008-07-27
  • 打赏
  • 举报
回复
重新顶一下,作为遗留问题跟踪
ok1234567 2008-07-27
  • 打赏
  • 举报
回复
超难,把 UTF 扯进去后,一切内容识别将不太可能,仅一个UTF-8字符就可能是1-6个字节
所以文件字符集的识别还是要依靠BOM
ethan119 2008-07-27
  • 打赏
  • 举报
回复
单纯的判断宽窄字符还可以,再分就不好说了
JamesDuan 2007-08-03
  • 打赏
  • 举报
回复
关注,希望能有好的解决方法
emptyness 2007-07-24
  • 打赏
  • 举报
回复
他能么................. 你确定他能么??
fengfeiwuwq 2007-07-24
  • 打赏
  • 举报
回复
不知道EmEditor是如何做到判断字符串编码类型
fengfeiwuwq 2007-07-24
  • 打赏
  • 举报
回复
在保存GB2312格式的时候,如果文本中有其他编码类型,会提示转换格式
emptyness 2007-07-23
  • 打赏
  • 举报
回复
,如何判断一个文本或者字符串包括哪些编码类型

文本有文件头指示,
字符串就不可能了.
yjgx007 2007-07-23
  • 打赏
  • 举报
回复
As we know, UTF-16, UTF-8 format file header indicates that, e.g, the 0xEF 0xFF header is for UTF-16 text file.
hua2136 2007-07-23
  • 打赏
  • 举报
回复
这个题材好,关注...
fengfeiwuwq 2007-07-23
  • 打赏
  • 举报
回复
是的,IsTextUnicode函数的确就是有这个问题,所以才希望在此获得高手帮助。
EmEditor文本编辑器能够正确识别Unicode编码类型,我希望实现的就是类似这种功能。
emptyness 2007-07-23
  • 打赏
  • 举报
回复
友情粘贴:


------------------------------------------------------------------------------------
我试过IsTextUnicode也不准, 此外实际应用中的unicode种类有好几种, utf-8只是其中一种

------------------------------------------------------------------------------------


DWORD IsTextUnicode(CONST PVOID pvBuffer, int cb,PINT pResult);
文本文件存在的问题是,它们的内容没有严格和明确的规则,因此很难确定该文件是包含A N S I 字符还是U n i c o d e 字符。I s Te x t U n i c o d e 使用一系列统计方法和定性方法,以便猜测缓存的内容。由于这不是一种确切的科学方法,因此I s Te x t U n i c o d e 有可能返回不正确的结果。

第一个参数p v B u ff e r 用于标识要测试的缓存的地址。该数据是个无效指针,因为你不知道你拥有的是A N S I 字符数组还是U n i c o d e
字符数组。

第二个参数c b 用于设定p v B u ff e r 指向的字节数。同样,由于你不知道缓存中放的是什么,因此c b 是个字节数,而不是字符数。请注意,不必设定缓存的整个长度。当然,I s Te x t U n i c o d e能够测试的字节越多,得到的结果越准确。

第三个参数p R e s u l t 是个整数的地址,必须在调用I s Te x t U n i c o d e 之前对它进行初始化。对该整数进行初始化后,就可以指明你要I s Te x t U n i c o d e 执行哪些测试。也可以为该参数传递N U L L ,在这种情况下,I s Te x t U n i c o d e 将执行它能够进行的所有测试(详细说明请参见Platform SDK 文档)。

如果I s Te x t U n i c o d e 认为缓存包含U n i c o d e 文本,便返回T R U E ,否则返回FA L S E 。确实是这样,尽管M i c r o s o f t将该函数的原型规定为返回D W O R D ,但是它实际上返回一个布尔值。如果在p R e s u l t 参数指向的整数中必须进行特定的测试,该函数就会在返回之前设定整数中的信息位,以反映每个测试的结果。

Wi n d o w s 9 8 在Windows 98 下,I s Te x t U n i c o d e 函数没有有用的实现代码,它只是返回FA L S E 。

-----------------------------------------------------------------------------------

这个函数很垃圾的,最好不要用。
有很多 ANSI 的中文它都认为是 Unicode。
--------------------------------------------------------------------
我怎么弄来弄去,他都认为是ANSI,给我能让他认成Unicode的例子?
------------------------------------------------------------------------



呵呵 看来还是让用户自己根据显示的情况选择用什么编码显示咯...
~ ~~
emptyness 2007-07-23
  • 打赏
  • 举报
回复

我写个 10 你说我写的是 10进制的 还是16进制的 还是2进制的 ?
呵呵,看来只能有文件自己相应位置标识自己是什么码了. ASCii码的文本是什么都不标适的.

帮你UP..
yjgx007 2007-07-23
  • 打赏
  • 举报
回复
IsTextUnicode

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧