推动力是:我有一些JSON文件,已经保存为.txt文件一段时间了。我想将它们全部重命名为.json以更准确。我很确定它们都是UTF-8编码的,因为大多数文件都可以通过Ajax发送。
无论如何,这个问题引发了一个更大的问题。
除了扩展名之外,所有这些文本类型之间是否有任何真正的区别?.html、.json、.css、.js、.txt、.py等...从内部来看,它们似乎都是相同的东西:一个UTF-8字符数组。
如果你可以互换使用它们,会比仅仅让人困惑更糟吗?它们中的任何一个有头文件吗?当被保存时,它们是否以不同方式进行编码?是否大多数.txt文件带有不同的扩展名?
无论如何,这个问题引发了一个更大的问题。
除了扩展名之外,所有这些文本类型之间是否有任何真正的区别?.html、.json、.css、.js、.txt、.py等...从内部来看,它们似乎都是相同的东西:一个UTF-8字符数组。
如果你可以互换使用它们,会比仅仅让人困惑更糟吗?它们中的任何一个有头文件吗?当被保存时,它们是否以不同方式进行编码?是否大多数.txt文件带有不同的扩展名?
.html
扩展名。浏览器不会检查content-type
,仅根据扩展名将其作为html
提供。尝试将图像更改为.txt
,它仍将以图像形式打开。尝试将其更改为.html
,它将作为大量编码文本打开。 - Miro.txt
(或除.html
之外的任何其他扩展名)的图像仍会在本地打开为图像。 - Miro.html
的content-type
头,但实际上它确实会检查。如果你在没有HTTP服务器的情况下打开一个文件,就没有content-type
头可以检查了,所以浏览器要么只使用文件扩展名,要么尝试根据文件内容的开头猜测正确的类型。这就是为什么浏览器可能会显示本地图像,即使它有错误的后缀。 - t.niesecontent-type
头是根据文件扩展名设置的。如果Web浏览器可以根据content-type
正确解释传递的内容,则它将基于该content-type
显示数据;如果浏览器在根据content-type
解释数据时遇到问题,则结果可能会有所不同,并且取决于浏览器和系统,您应该假设行为是不可预测和未定义的。 - t.niese