首页 / 知识
关于c#:如何检测文本文件的编码/代码页
2023-04-17 01:06:00

How can I detect the encoding/codepage of a text file在我们的应用程序中,我们接收来自不同来源的文本文件( 有没有办法(自动)检测文本文件的代码页? 谢谢你的回答,这就是我所做的。 我们收到的文件来自最终用户,他们对代码页一无所知。接收者也是最终用户,到目前为止,这就是他们所知道的关于代码页的事情:代码页存在,而且很烦人。 解决方案:
你不能检测到代码页,你需要被告知。你可以分析字节并猜测它,但这会产生一些奇怪(有时很有趣)的结果。我现在找不到它,但我相信记事本可以被骗到用中文显示英文文本。 无论如何,这是你需要阅读的:绝对最小值每个软件开发人员绝对,肯定必须知道Unicode和字符集(没有借口!). 特别是乔尔说:
如果您希望检测非UTF编码(即没有BOM),那么您基本上需要对文本进行启发式和统计分析。您可能想看一下Mozilla关于通用字符集检测的论文(同样的链接,通过回程机器有更好的格式)。 您尝试过Mozilla通用字符集检测器的C端口吗? 示例来自http://code.google.com/p/ude/
这显然是错误的。每个Web浏览器都有某种通用的字符集检测器来处理没有任何编码指示的页面。火狐有一个。你可以下载代码,看看它是怎么做的。请参阅此处的一些文档。基本上,这是一个启发式的,但它确实很有效。 如果文本数量合理,甚至可以检测语言。 这是我刚刚用谷歌找到的另一个: 我知道这个问题已经很晚了,而且这个解决方案对某些人没有吸引力(因为它以英语为中心的偏见和缺乏统计/经验测试),但是它对我来说非常有效,特别是对于处理上传的csv数据: http://www.architectshack.com/textfileencodingdetector.ashx 优势:
注意:我是写这门课的人,所以很明显,把它和一粒盐一起吃吧!:) 寻找不同的解决方案,我发现 https://code.google.com/p/ude网站/ 这个解决方案有点重。 我需要一些基本的编码检测,基于4个第一字节,可能还有XML字符集检测——所以我从Internet上获取了一些样本源代码,并添加了稍微修改过的 网址:http://lists.w3.org/archives/public/www-validator/2002aug/0084.html 为Java编写的。
从文件中读取前1024个字节就足够了,但我正在加载整个文件。 记事本++有现成的这个功能。它还支持更改它。 如果有人在寻找93.9%的解决方案。这对我很有用:
我在python中做过类似的事情。基本上,您需要来自各种编码的大量示例数据,这些数据通过一个滑动的双字节窗口分解并存储在字典(哈希)中,通过字节对键控,提供编码列表的值。 根据字典(hash),您将输入文本和:
如果您还对不以任何BOM开头的UTF编码文本进行了抽样,那么第二步将涵盖从第一步开始的那些文本。 到目前为止,它对我(示例数据和后续输入数据是各种语言的字幕)起作用,错误率也在降低。 "uchardet"工具可以很好地使用每个字符集的字符频率分布模型。更大的文件和更"典型"的文件有更多的信心(显然)。 在Ubuntu上,你只需要1[1]。 在其他系统上,从以下位置获取源、用法和文档:https://github.com/byvoid/uchardet streamreader类的构造函数接受"detect encoding"参数。 如果可以链接到C库,则可以使用
这是GPL V2。 找到了同样的问题,但还没有找到一个自动检测的好解决方案。现在我使用pspad(www.pspad.com)来解决这个问题;)很好。 因为它基本上是启发式的,所以使用先前从同一个源接收到的文件的编码作为第一个提示可能会有所帮助。 大多数人(或应用程序)每次的操作顺序几乎相同,通常在同一台机器上,所以很可能当Bob创建一个.csv文件并将其发送给Mary时,它总是使用Windows-1252或其机器默认的任何东西。 在可能的情况下,一点客户培训也不会有任何伤害:—) 我实际上在寻找一种通用的,而不是检测文件编码的编程方法,但是我还没有找到。通过测试不同的编码,我发现我的文本是UTF-7。 所以我第一次做的是:streamreader file=file.opentext(完整文件名); 我不得不把它改成:streamreader file=new streamreader(完整文件名,system.text.encoding.utf7); opentext假定它是utf-8。 您也可以这样创建streamreader新的streamreader(fullfilename,true),第二个参数意味着它应该尝试从文件的byteordermark检测编码,但在我的例子中不起作用。 10Y(!)从被问到现在已经过去了,但我仍然没有看到提到微软优秀的非gpl'ed解决方案:imultilanguage2 api。 上面提到的大多数库都是基于Mozilla的UDE——浏览器已经解决了类似的问题,这似乎是合理的。我不知道Chrome的解决方案是什么,但是自从IE 5.0 ms发布了它们的解决方案,它是: 这是一个本地的COM调用,但是CarstenZeumer做了一些非常好的工作,它为.NET的使用处理互操作混乱。周围还有一些其他的,但总的来说,这个图书馆并没有得到应有的关注。 作为itmeze post的插件,我使用了这个函数来转换Mozilla通用字符集检测器的C端口的输出。
MSDN 在akelpad中打开文件(或只是复制/粘贴一个乱码的文本),转到编辑->选择->重新编码…->检查"自动检测"。 感谢@erik aronesty提及 请参阅:chardet man page:https://www.commandlinux.com/man-page/man1/chardetect.1.html 这将启发式地检测(猜测)每个给定文件的字符编码,并报告每个文件检测到的字符编码的名称和可信度。 我使用此代码在读取文件时检测Unicode和Windows默认的ANSI代码页。对于其他编码,需要手动或通过编程检查内容。这可以用来保存与打开时编码相同的文本。(我使用VB.NET)
|
最新内容
相关内容
linux文件异或命令?
linux文件异或命令?,数字,系统,工作,管理,命令,数据,网络,文件,第一,单位,基本linux命令1、linux系统常用操作命令如下:ls:全拼list,功能是列出目linux文件复制的命令?
linux文件复制的命令?,系统,文件,命令,目录,源文件,基本知识,位置,目标,选项,文件夹,在Linux中,要将指定源文件复制到目标文件,但不覆盖原有文linux写文件命令行?
linux写文件命令行?,工作,系统,命令,信息,名字,文件,目录,资料,标准,时间,linux命令编辑文件命令是什么linux常用命令有pwd命令、cd命令、ls命linux复制命令文件?
linux复制命令文件?,系统,文件,命令,目录,基本知识,源文件,目标,文件夹,路径,选项,linux怎么复制命令cp命令:用于复制文件或目录。语法如下:`baslinux下文件均分命令?
linux下文件均分命令?,管理,情况,系统,工作,信息,地址,命令,目录,单位,设备,Linux文件系统操作命令1、cat:可以显示文件的内容(经常和more搭配linux的文件替换命令?
linux的文件替换命令?,系统,工作,实时,命令,文件,批量,字符串,内容,方法,表示,linux命令行替换文件内容Linux下批量替换多个文件中的字符串的linux命令有两个文件?
linux命令有两个文件?,文件,代码,系统,命令,两个,内容,文件夹,光标,后方,文件名,在linux下我有两个文件夹w1,w2,怎样把它们合并到一个文件夹可linux查文件数量命令?
linux查文件数量命令?,系统,数据,电脑,命令,文件,信息,代码,对比,软件,第三,linux系统如何查看自己创建了多少文件夹为了实验,我打算总共创建 7linux磁盘检测命令?
linux磁盘检测命令?,情况,系统,数据,检测,管理,信息,命令,磁盘,设备,单位,linux查看磁盘空间命令1、查看磁盘空间-du du命令也是检查硬盘使用linux命令去重文件?
linux命令去重文件?,系统,工作,命令,信息,数据,环境,代码,文件,目录,操作,Linux的命令行中一些文本操作技巧的实例分享1、把文件中所有的 findlinux写大文件命令?
linux写大文件命令?,服务,数据,第三,较大,基础,工具,设备,文件,大小,命令,linux拼接文件时出错文件过大)在windows下转换:利用一些编辑器如Ultralinux查询文件夹命令?
linux查询文件夹命令?,系统,软件,电脑,命令,文件,文件夹,单位,第三,档案,数据,linux文件夹的大小命令?1、最简单的查看方法可以使用ls -ll、ls