Python,文件(1) - 为什么使用数字 [7,8,9,10,12,13,27] 和范围(0x20,0x100)来确定文本与二进制文件

2024-02-26

关于一个python中判断文件是二进制还是文本的解决方案 https://stackoverflow.com/a/7392391,回答者使用:

textchars = bytearray([7,8,9,10,12,13,27]) + bytearray(range(0x20, 0x100))

然后使用.translate(None, textchars)删除(或替换为任何内容)以二进制形式读取的文件中的所有此类字符。

回答者还认为,这种数字选择是“基于 file(1) 行为”(什么是文本,什么不是)。这些数字的重要意义在于从二进制文件中确定文本文件?


它们代表可打印文本的最常见代码点,以及换行符、空格和回车符等。 ASCII 被覆盖到 0x7F,Latin-1 或 Windows Codepage 1251 等标准使用剩余的 128 个字节作为重音字符等。

您期望文本only使用这些代码点。二进制数据将使用all0x00-0xFF 范围内的代码点;例如文本文件可能不会使用 \x00 (NUL) 或 \x1F(ASCII 标准中的单位分隔符)。

不过,这充其量只是一种启发式的方法。某些文本文件可能仍会尝试使用C0 控制代码 https://en.wikipedia.org/wiki/C0_and_C1_control_codes在这 7 个明确命名的字符之外,我确信存在二进制数据,而这些数据恰好不包括未包含在textchars string.

该系列的作者可能基于text_chars table https://github.com/file/file/blob/master/src/encoding.c#L151-L228来自file命令。它将字节标记为非文本、ASCII、Latin-1 或非 ISO 扩展 ASCII,并包含有关选择这些代码点的原因的文档:

/*
 * This table reflects a particular philosophy about what constitutes
 * "text," and there is room for disagreement about it.
 *
 * [....]
 *
 * The table below considers a file to be ASCII if all of its characters
 * are either ASCII printing characters (again, according to the X3.4
 * standard, not isascii()) or any of the following controls: bell,
 * backspace, tab, line feed, form feed, carriage return, esc, nextline.
 *
 * I include bell because some programs (particularly shell scripts)
 * use it literally, even though it is rare in normal text.  I exclude
 * vertical tab because it never seems to be used in real text.  I also
 * include, with hesitation, the X3.64/ECMA-43 control nextline (0x85),
 * because that's what the dd EBCDIC->ASCII table maps the EBCDIC newline
 * character to.  It might be more appropriate to include it in the 8859
 * set instead of the ASCII set, but it's got to be included in *something*
 * we recognize or EBCDIC files aren't going to be considered textual.
 *
 * [.....]
 */

有趣的是,那张桌子excludes0x7F,您找到的代码没有。

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

Python,文件(1) - 为什么使用数字 [7,8,9,10,12,13,27] 和范围(0x20,0x100)来确定文本与二进制文件 的相关文章

随机推荐

  • 如何检索 Pandas 数据框中的列数?

    如何以编程方式检索 pandas 数据框中的列数 我希望有这样的事情 df num columns Like so import pandas as pd df pd DataFrame pear 1 2 3 apple 2 3 4 ora
  • Docker:运行 html 文件的基本示例 dockerfile

    docker 和 dockerfile 是否有任何非常基本且仍然可行的示例来运行单个 html 文件并在 docker 的帮助下将其显示给其他人 要在 http 上提供 html 文件 您需要一个 Web 服务器 因此要做到这一点 您需要做
  • scipy.interpolate.Rbf 的意外结果

    我在使用 RBF 进行插值时遇到一些错误 这是一维的示例 我认为这与我的 y 值彼此之间的接近程度有关 有什么解决办法吗 import numpy as np from scipy interpolate import Rbf interp
  • 从雅虎财经获取 1 分钟柱线

    我正在尝试从雅虎财经下载 1 分钟的历史股票价格 包括当天和前一天的价格 Yahoo 就像 Google 支持最多 15 天的数据 使用以下 API 查询 http chartapi finance yahoo com instrument
  • 如何使用 Twitter API 批准关注者对受保护帐户的请求?

    The 友谊 创造 https dev twitter com docs api 1 post friendships create似乎是最接近的选项 但他们的文档没有明确提及这种情况 有人能够做到这一点吗 我收到了 Twitter 员工的
  • 为什么使用 for 循环而不是 while 循环? [复制]

    这个问题在这里已经有答案了 可能的重复 使用 for 循环还是 while 循环进行迭代 https stackoverflow com questions 99164 iterate with for loop or while loop
  • 如何在innerText 或nodeValue 之间进行选择?

    当我需要更改 span 元素中的文本时 我应该使用哪一个以及有什么区别 var spnDetailDisplay document getElementById spnDetailDisplay spnDetailDisplay inner
  • 没有外键关系的内联管理

    是否可以手动指定要在内联中显示的相关对象集 其中不存在外键关系 Parent class Diary models Model day models DateField activities models TextField Child c
  • FFMPEG读取关键帧

    我正在尝试编写一个 C 程序 该程序将使用 ffmpeg 从视频文件中读取关键帧 到目前为止 我设法使用所有框架av read frame你按顺序阅读的地方 一帧一帧 但我在使用时遇到一些问题av seek frame这 如果我是正确的 应
  • 如何在不使用 eval 的情况下动态包含 Perl 模块?

    我需要动态包含 Perl 模块 但如果可能的话 由于工作编码标准 我希望远离 eval 这有效 module My module eval use module 但我需要一种方法来做到这一点 而不需要eval如果可能的话 所有谷歌搜索都会导
  • 客户端发送 SOAP 请求并接收响应

    尝试创建一个 C 客户端 将开发为 Windows 服务 将 SOAP 请求发送到 Web 服务 并获取结果 由此question https stackoverflow com questions 1862965 sending and
  • C++ 中使用运算符 [] 重载区分读和写

    我有一个包含预测数组的安全类 预测是一个类 它只包含一个双精度数 我想允许更改双精度值 但只允许正值 当尝试读取双精度值时 如果该值未初始化 在我的代码中等于 1 则会抛出异常 我也有双运算符像这样的东西 class Prediction
  • SWITCH javascript 总是执行默认情况的问题

    嗯 我有这个麻烦 我一直在处理 但我就是无法让它工作 我有这个功能 function getDirections dir var img switch dir case 0 img N png break case 1 img NE png
  • 正则表达式匹配完整字符串

    我正在尝试为 301 创建一个正则表达式来帮助我识别 url site com abc 并重定向到site com xyz 我尝试过正则表达式 abc 它工作正常 但问题甚至是像这样的网址site com 123 sdas abc 213被
  • Vue 组件中的 Laravel CSRF 字段

    我想问一下如何在我的 vue 组件中添加 csrf field 错误是 属性或方法 csrfToken 未在实例上定义 但在渲染期间引用 确保在数据选项中声明反应数据属性 这是代码
  • 获取数字的类似于 Excel 的列名称的算法

    我正在编写一个生成一些 Excel 文档的脚本 我需要将数字转换为其等效的列名称 例如 1 gt A 2 gt B 27 gt AA 28 gt AB 14558 gt UMX 我已经编写了一个算法来执行此操作 但我想知道是否有更简单或更快
  • 防止 this.state 与 setState 一起使用

    参考资料 https reactjs org docs react component html setstate states setState 并不总是立即更新组件 它可能会批量更新或推迟更新 这使得在调用 setState 后立即读取
  • Stackable Traits Pattern:方法的实现“需要‘抽象覆盖’修饰符”

    最近 我发现了可堆叠特征模式并遵循了所描述的示例here http www artima com scalazine articles stackable trait pattern html 一切正常 但有一种情况我无法理解 trait
  • 如何使用 Rails 5.1.0 和 jQuery

    我开始使用 Rails v5 1 0 据我所知 它默认没有 jQuery 但是想要安装 jQuery 来与 Zurb Foundation 6 一起使用 由于基础当前未加载模态 设置此功能的最佳方法是什么 Summary 安装纱线 yarn
  • Python,文件(1) - 为什么使用数字 [7,8,9,10,12,13,27] 和范围(0x20,0x100)来确定文本与二进制文件

    关于一个python中判断文件是二进制还是文本的解决方案 https stackoverflow com a 7392391 回答者使用 textchars bytearray 7 8 9 10 12 13 27 bytearray ran