强制更改扩展名后文件上显示的字符是什么?

What are the characters shown on a file after forcefully changing the extension?

最近我将 .apk 文件的扩展名更改为 .txt,尽管如此,我还是能够在记事本上打开它带有一些随机字符,这些字符在文件中的键盘上不可用。

org/antlr/runtime/ANTLRFileStream.class…TmOÓP=w[×QËÀ)ê|A…ÑETÔ¢NP¢™ãË—º•Q3ZÓcüþ¿j",£ß4ñGÏmÇñ˽Ïs{žçœçeûùëóW ±¨á0F5d0ÖA˔‹LÈã’ŠËR˜PqEƒ†Iy\•ØkÒºÞÁЂ´¦TL«˜H­95{ÙÚ°2K/­×–Y³Üªù(ð·:%œv\'¸!Гû÷óðª@¢èUܵä¸öòæÆÛ_±^ÔÂt^Ùª­Z¾#ýæc"XwêKž_5-7¨ù¦¿éΆmÞZ^Y*ÍS “ÛÖ¹µ¹7eûUàxn]%µ‘Ð^TÊvË^…kžUˆ;u_àTw<sÁ}µDL%ÛªØ>ùÄš@º…Rø˜¨;o)\,0ǚԞ݇ؓ‡àΪ<ò6ýr³¥GsÃ횪EOÌ_…É =è•ǬŽ#8ª£½ú^fùõ˜Ž›¸%pü IT{`Á2þ¶<Š:î`NÇ<î긇A˜èÿïˆ8Ç0Q¥»¨#- Ze7srRÉšíVƒõÐ]0rí&tÀ”O´‡[Y±K ö¬H›¯Ü %÷¬8Ì) r+åšW·ÑÏF†¿,bd—i%h³­ˆá8½YÄiª‘

不仅如此,在转换许多其他扩展名时,如 .jar.xapk 等,也会向我显示这些字符。

任何人都可以解释一下,这些字符基于哪些因素,以及 OS 如何决定或尝试在不受支持的文件中准确显示哪些字符。

Is there a way to get the original content through this data?

假设您创建了一个文本编辑器,它可以编写和保存文本文件,也可以打开文本文件。您还定义了将用于在二进制文件中保存文本的编码(保存时所有文件都是二进制文件)。所以你的编码看起来如下:

Your encoding                               Emacs encoding    

TEXT       BINARY                          TEXT       BINARY
A          01000001                         ă         01000001    
B          01000010                         Ћ         01000010         
...                                         ...
Z          01011010                         Ϡ         01011010   

假设您创建了一个包含 'ABZ' 内容的文件。保存时此文件包含值 010000010100001001011010。当您使用文本编辑器打开此文件时,编辑器发现 010000010100001001011010 作为文件内容并使用上面的编码它知道它的 'ABZ' 因此它在屏幕上打印 'ABZ' 。

现在假设您使用 emacs 打开同一个文件,因为 emacs 使用它自己的编码,所以它显示“ăЋϠ”,emacs 没有任何问题。它只是不知道数据是使用您的自定义编码写入的。

所以重点是每个文件都是以特定格式编写的,例如APK格式只能被Android系统正确理解。当您尝试在文本编辑器中打开 APK 文件时,它只是试图以与上述示例中的 emacs 相同的方式理解二进制数据。

Is there a way to get the original content through this data?

如果您知道写入数据时使用的原始编码,那么您可以使用相同的编码读取文件内容。