【发布时间】:2023-02-02 22:15:26
【问题描述】:
我想知道为什么当你在 Windows 记事本中打开图片时,你会得到一大堆看起来很奇怪的字符。
是因为它需要每个像素并将其转换为对应的 ASCII 码吗?记事本专门对文件做什么。
任何和所有答案将不胜感激。
顺便说一句,我的特定文件开头有字母 IHDR
【问题讨论】:
标签: windows image ascii notepad
我想知道为什么当你在 Windows 记事本中打开图片时,你会得到一大堆看起来很奇怪的字符。
是因为它需要每个像素并将其转换为对应的 ASCII 码吗?记事本专门对文件做什么。
任何和所有答案将不胜感激。
顺便说一句,我的特定文件开头有字母 IHDR
【问题讨论】:
标签: windows image ascii notepad
每当记事本(或任何其他文本编辑器,无论其价值如何)打开文件时,它都会读取文件的字节并以某种编码解释它们。哪种编码?这取决于平台、设置和可能的开放选项。
但是出于这个问题的目的,它选择哪种编码实际上并不是很重要,因为没有编码是“正确的”:图像文件(顺便说一下,IHDR 暗示它是 PNG 文件)是一个二进制数据流,其中大多数字节不代表任何有意义的文本。
一些元数据可能是文本的(例如,如果某处有注释)并且文件格式的某些部分可能偶然或设计为“看起来像”文本。
IHDR 是一个例子:PNG is made up of chunks 并且块类型是 4 字节序列,当使用 ASCII(或基于 ASCII 的编码)时,这些序列“恰好”全部解码为某种程度上合理的文本。
但是对于文件中的大多数其他内容,字节的二进制表示具有与可以应用的任何文本编码无关的特定解释。
例如,IHDR 块的前 4 个字节仅定义图像的宽度。
因此,一个 300 像素宽的图像将具有这些字节为 00 00 01 2C(因为 300 十进制是 0x12C 十六进制)。
如果使用 ASCII 解码可以被解释为
现在 NUL 和 SOH 是不可打印的控制字符,所以记事本可能只会将它们表示为空格或某种控制字符,但 , 只是一个普通的旧 ,.
这种情况不断发生:记事本试图将任意字节解释为文本,即使它们不是。
【讨论】:
我对堆栈溢出的第一个回答,如有任何错误,请原谅。 我也做了你问的同样的事情,我发现当我在文本编辑器中打开任何 jpg 文件时,它会将它们显示为十六进制数字,即使改变一个位,文件也会变得完全无用我尝试了所有不同的 jpg opener给出了同样的错误。 但是当我使用 nano 编辑器查看 jpeg 文件中的内容时,它显示了带有奇怪符号的完全不同的文本......就像一个 JSON 文件(我不知道那是什么)......但是对该文件进行更改确实改变了图像的属性,如混色和清晰度等......我只是通过更改几个字符破坏了图片,现在它完全无法识别...... 所以我从所有这些中学到的是,它取决于您正在编辑的文件的格式,如果您对其进行任何更改,它会更改图像。
抱歉有任何语法错误。
【讨论】: