当 BOM(字节顺序标记)丢失时,如何才能最好地猜测编码?

2023-12-20

我的程序必须读取使用各种编码的文件。它们可能是 ANSI、UTF-8 或 UTF-16(大端或小端)。

当 BOM(字节顺序标记)存在时,我没有问题。我知道该文件是 UTF-8 还是 UTF-16 BE 或 LE。

我想假设当没有 BOM 时该文件是 ANSI。但我发现我正在处理的文件经常缺少 BOM。因此,没有 BOM 可能意味着该文件是 ANSI、UTF-8、UTF-16 BE 或 LE。

当文件没有 BOM 时,扫描某些文件并最准确地猜测编码类型的最佳方法是什么?如果文件是 ANSI,我希望接近 100%,如果文件是 UTF 格式,则在 90% 左右。

我正在寻找一种通用的算法方法来确定这一点。但我实际上使用 Delphi 2009,它知道 Unicode 并且有一个 TEncoding 类,所以特定于它的东西将是一个额外的好处。


Answer:

ShreevatsaR 的回答让我在 Google 上搜索“通用编码检测器 delphi”,令我惊讶的是,在我只活了大约 45 分钟后,这篇文章就被列在了 #1 的位置!那是快速的谷歌机器人!!同样令人惊讶的是 Stackoverflow 如此迅速地排名第一。

Google 中的第二条条目是 Fred Eaker 的博客条目字符编码检测 http://fredeaker.blogspot.com/2007/01/character-encoding-detection.html列出了各种语言的算法。

我在该页面上发现了 Delphi 的提及,它直接引导我SourceForge 的免费开源 ChsDet 字符集检测器 http://chsdet.sourceforge.net/用 Delphi 编写并基于 Mozilla 的 i18n 组件。

极好的!谢谢所有回答的人(全部+1),谢谢ShreevatsaR,再次感谢Stackoverflow,帮助我在不到一个小时的时间内找到了答案!


也许你可以编写一个Python脚本来使用Chardet:通用编码检测器 http://chardet.feedparser.org/。它是 Firefox 使用的字符编码检测的重新实现,并由许多不同的应用 http://diveintomark.org/archives/2008/03/05/upstream。有用的链接:Mozilla 的代码 http://mxr.mozilla.org/seamonkey/source/extensions/universalchardet/src/base/, 研究论文 http://www.mozilla.org/projects/intl/UniversalCharsetDetection.html它基于(讽刺的是,我的 Firefox 无法正确检测该页面的编码),简短的解释 http://chardet.feedparser.org/docs/faq.html#faq.impossible, 详细解释 http://chardet.feedparser.org/docs/how-it-works.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当 BOM(字节顺序标记)丢失时,如何才能最好地猜测编码? 的相关文章

  • 四舍五入到最接近的 2 的幂

    是否有一个单行表达式 可能是布尔值 来获取最接近的2 n给定整数的数字 示例 5 6 7 必须是 8 四舍五入到下一个更高的二的幂 参见一些小技巧 http graphics stanford edu 7Eseander bithacks
  • 在 C# 中对 PDF 进行 Base64 编码?

    有人可以提供一些有关如何执行此操作的说明吗 我可以对常规文本或字节数组执行此操作 但不知道如何处理 pdf 我要先将pdf填充到字节数组中吗 Use File ReadAllBytes http msdn microsoft com en
  • 运动结构,根据 2D 图像点对应关系重建 3D 点云

    Use case 物体绕其中心以不同的速度旋转 固定摄像机正在观察物体 给定 2D 图像点对应关系重建 3D 点云 当物体旋转时 相机可以看到它的不同部分 从而检测到不同的点和对应关系 Scene A N 张图片b N 1 图像对C N 1
  • 查找邻接表中所有连接的节点

    我有一个 DAG 的邻接列表 我需要从所有节点中找到所有连接的节点 例如 对于下面的 DAG 1 gt 3 gt 4 2 gt 4 3 gt 2 4 gt 5 5 gt NULL 我需要这个 1 gt 2 3 4 5 2 gt 4 5 3
  • com.jcraft.jsch.JSchException:算法协商失败

    我正在尝试从客户端计算机连接 sftp 服务器 但是 com jcraft jsch JSchException 算法协商失败 我收到这种错误 com jcraft jsch JSchException Algorithm negotiat
  • 如何编写一个简单的版本控制系统?

    我想做一个简单的版本控制系统 但我不知道如何构建我的数据和代码 这是一个简短的例子 用户登录 User has two options when uploading a file 提交新文件 提交文件的新版本 用户应该能够看到树 版本不同
  • 快速计算幂(例如 2^11)[重复]

    这个问题在这里已经有答案了 可能的重复 实现基于整数的幂函数 pow int int 的最有效方法 https stackoverflow com questions 101439 the most efficient way to imp
  • 如何在 Perl 中生成数组的所有排列?

    生成所有内容的最佳 优雅 简单 高效 方式是什么 n perl 中数组的排列 例如 如果我有一个数组 arr 0 1 2 我想输出所有排列 0 1 2 0 2 1 1 0 2 1 2 0 2 0 1 2 1 0 它可能应该是一个返回迭代器的
  • JavaScript 中多个数组的笛卡尔积

    如何在 JavaScript 中实现多个数组的笛卡尔积 举个例子 cartesian 1 2 10 20 100 200 300 应该返回 1 10 100 1 10 200 1 10 300 2 10 100 2 10 200 2020
  • 检测 UTF-8 编码文本文件中的损坏字符

    我有一个使用错误的字符编码编辑的文本文件 因此当我使用 UTF 8 打开它时 某些字符串中有一些 mojibake 和损坏的字符 哪种脚本语言能够最有效地检测这些损坏的字符 Perl 不是一个选择 我基本上试图找到一种使用脚本扫描文本文件并
  • 多线程归并排序,添加额外的线程

    我在java中的多线程合并排序算法中面临一个问题 我应该将代码修改为 3 4 5 6 7 8 线程合并排序 将原始数组划分为subArrays 目前它有2subArrays 如何将原始数组拆分为 3 4 5 6 7 8subArray是为了
  • 转置矩阵存储在一维数组中,无需使用额外的内存[重复]

    这个问题在这里已经有答案了 可能的重复 矩阵的就地转置 https stackoverflow com questions 9227747 in place transposition of a matrix 最近参加了技术笔试 通过以下问
  • 将数字 1 排列在二维矩阵中

    给定二维矩阵的行数和列数 初始矩阵所有元素均为0 给定每行中应该出现的 1 的数量 给定每列中应该出现的 1 的数量 确定是否可以形成这样的矩阵 例子 Input r 3 c 2 no of rows and columns 2 1 0 n
  • 高效找到圆和网格的交点

    找到由圆心和半径定义的圆与任意网格的交点的好方法是什么 An illustration of the points I am trying to find 到目前为止我想到的可能的解决方案 找到位于中心 半径之间的所有线 对于每条线计算交点
  • 我想知道像tineye.com这样的反向图像搜索服务是如何工作的......?

    像 TinEye 这样的反向图像搜索引擎如何工作 我的意思是进行图像搜索需要哪些参数 不知道 TinEye 是否使用这个 但是SURF http en wikipedia org wiki SURF是用于此目的的常用算法 在这里您可以看到一
  • 在 RStudio 控制台中显示西里尔字母

    我在 Rstudio 控制台中显示俄语字符时遇到问题 我使用 readxl 包加载带有俄语的 Excel 文件 西里尔字母在数据框中正确显示 但是 如果我运行一个输出包含变量名称的函数 RStudio 控制台将显示符号而不是正确的西里尔字符
  • 高效编写航空公司路由算法

    Given 航班数据库 出发城市 到达城市 出发时间 到达时间 问题 如果出发时间不重要 那么在两个城市之间列出服务的最有效算法是什么 考虑到我们想要最小化中途停留时间 但仍高于标称最小值 即 20 分钟 并最小化中途停留次数 如果有直达航
  • 这些加密算法有什么区别?

    两者有什么区别MCRYPT RIJNDAEL 128 MCRYPT RIJNDAEL 256 MCRYPT BLOWFISH等等 哪一种最适合网络数据传输 Rijandel 是 AES 的另一个名称 AES 是当前的 一个好的标准 算法 数
  • 处理 Json.NET 中的字节顺序标记 (BOM) 字符

    对于 NET Core 项目 我使用返回 JSON 格式的数据的公共 API 然而 他们的一些 不是全部 响应在字符串开头有一个 BOM 字符 这会导致 Visual Studio 和 Json NET 无法将该字符串识别为有效的 JSON
  • 拉伸数组

    我有一个形成曲线的样本向量 假设其中有 1000 个点 如果我想将其拉伸到填充 1500 个点 给出不错结果的最简单算法是什么 我正在寻找一些只有几行 C C 的东西 我总是想增加向量的大小 并且新向量可以是当前向量大小的 1 1 倍到 5

随机推荐

  • 如何在 C++ 中正确返回 null/空对象?

    我是一名 Java 开发人员 试图解决一个简单的 C 任务 在 Java 中 如果我想返回一个空 null 对象 以指示未找到该对象 我只需返回 null 例子 Person getGetByName String name for int
  • iOS5中如何将旧的emoji编码转换为最新的编码?

    遗憾的是 在 iOS5 最终发布后 我收到用户的报告称他们无法登录 因为名字里有emoji符号 苹果改变了emoji的编码 那么用户名包含旧版本的表情符号 我如何将它们转换为新的编码 thanks 具体来说 一个表情符号 老虎 在iOS5中
  • django 注释框架:distinct() 不起作用?

    在评论模型的任何字段上运行distinct 总是返回所有记录 Comment objects values user distinct 用户 1 用户 0 用户 0 用户 0 用户 0 用户 1 用户 1 用户 1 用户 1 Comment
  • 如何获取要从 Elastic Beanstalk 上的 Dockerfile.aws.json 运行的命令?

    我有一个Dockerfile and a Dockerfile aws json AWSEBDockerrunVersion 1 Ports ContainerPort 5000 HostPort 5000 Volumes HostDire
  • 列出 RestEasy 服务的所有公开/可用端点?

    是否可以以简单的方式列出 RestEasy 服务的所有公开 可用端点 有一个 RestEasy 插件 stats 它公开了 resteasy registry 它需要注册在web xml
  • 使用step_naomit进行预测并使用tidymodels保留ID

    在使用随机森林模型进行预测以合并回原始数据帧时 我尝试在行上保留 ID 我在配方中使用了step naomit 它在烘焙训练数据时删除了缺少数据的行 同时也删除了测试数据上缺少数据的记录 不幸的是 我没有 ID 来轻松知道哪些记录被删除 因
  • Java:以管理员身份运行时无法访问 jarfile

    我有一个名为 test jar 的 jar 文件 我使用同一文件夹中的批处理脚本运行该文件 这是批处理代码 java jar test jar pause jar 本身工作没有问题 我可以很好地运行它 但是 如果我尝试以管理员身份运行批处理
  • 如果订阅是在用户帐户上管理的,自动续订订阅是否需要恢复按钮?

    在 WWDC 2013 中 他们提到自动续订订阅需要恢复按钮 但是 在我们的模型中 订阅是通过用户帐户进行管理的 恢复是通过登录帐户来完成的 收据存储在我们的服务器上 拥有恢复按钮实际上不会做任何事情 但如果不使用它会面临被拒绝的风险吗 N
  • dyld:未加载库:@rpath/libswiftAVFoundation.dylib

    我刚刚更新到 Xcode 7 和 swift 2 并完成了转换带来的错误的修复 我终于得到了要构建的项目 但在启动屏幕后我收到一条错误消息 dyld 未加载库 rpath libswiftAVFoundation dylib 引用自 var
  • 致命:坏对象 HEAD

    有人可以帮我解决这个问题吗 我之前曾就此发表过一篇文章 但我无法通过这些答案解决它 请帮忙 我尝试过跑步git fsck full我得到 Checking object directories 100 256 256 done error
  • ORACLE更新后触发器:解决ORA-04091突变表错误

    我正在尝试创建一个触发器 create or replace trigger NAME OF TRIGGER after insert or update on table1 REFERENCING OLD AS OLD NEW AS NE
  • Pandas 对行值进行排序

    我有一个像这样的熊猫数据框 Col1 Col2 Col3 1 1092 203 802 是否可以对这个数据框进行排序并得到这样的结果 Col1 Col3 Col2 1 1092 802 203 I tried sort values但它不起
  • ExecutorService 按顺序执行任务,但从池中获取线程

    我正在尝试构建一个实现ExecutorService 我们称之为SequentialPooledExecutor 具有以下性质 的所有实例SequentialPooledExecutor共享同一个线程池 调用同一个实例SequentialP
  • 如何对 Bundle 中的 javascript 文件进行版本控制?

    我想将我的 JS 脚本包含在Bundle并且同时version它们以避免浏览器缓存 如果这些脚本已更改 有没有 native 方式与ASP NET MVC 5来完成这个 我找到了一个名为的图书馆Cassette http getcasset
  • 如何使用动态行跨度显示数据库中的数据

    我是 php 编程新手 在使用 php 和 html 显示 mysql 数据库中的数据时遇到一些问题 这是我的桌子 location id location location component id comopnent id locati
  • C 多类型函数

    我想用 C 编写一些函数 但它们必须适用于所有数字类型 int float double 什么是好的做法 在 void 上使用指针 当然还有指向函数的指针 或者为每种类型编写不同的函数 例如 float func float a float
  • pyenv 在执行所述模块时在终端中打印模块

    我已经转向使用pyenv运行 python 时 但问题是当我执行一个模块并且该模块导入其他模块时pyenv经常会打印出一大堆对我来说是胡言乱语的内容 例如 alias py37 pyenv local 3 7 3 python Admins
  • Symfony2 __toString() 错误

    我在将实体保存回给我时遇到此错误 Catchable Fatal Error Method My BusinessBundle Entity Type toString must return a string value in var w
  • 使用rest api在Google Drive中创建新文件夹

    仅当谷歌驱动器不存在时 如何使用 python 在谷歌驱动器中创建新文件夹 我对这个 google API 和 python 完全陌生 我的帐户有一个访问令牌 我想使用它创建文件夹 创建文件夹 import json import requ
  • 当 BOM(字节顺序标记)丢失时,如何才能最好地猜测编码?

    我的程序必须读取使用各种编码的文件 它们可能是 ANSI UTF 8 或 UTF 16 大端或小端 当 BOM 字节顺序标记 存在时 我没有问题 我知道该文件是 UTF 8 还是 UTF 16 BE 或 LE 我想假设当没有 BOM 时该文