难以理解 ASCII 的工作原理
troubles with understanding how ASCII works
我有几个关于 ASCII 编码的问题:
- 为什么ASCII编码可以定义127个字符?应该是7位,也就是2的7次方就是128,哪里少了一个字符?
- 当我将文本文件保存为 textfile.txt 时,它应该以 ASCII 编码保存,对吗?但是当我在文件中写入 10 个字符时,它有 10 个字节,即 80 位,不应该是 70 吗?
- 如何将文件保存为每个字符有 7 位的 ASCII 码?
- 是否有些软件仍然使用ASCII编码来存储信息?
1) How come there is 127 characters definable in ASCII coding ? It
should be 7-bit, which means 2 to the power of 7 which equals
128...where is the one character missing
NUL字符,其ASCII码为0,就是你漏掉的那个。
2) When I save a textfile as a textfile.txt it should be saved in
ASCII coding right ? But when I write like 10 characters into the file
it has 10 bytes, which is 80 bits, shouldnt it be 70 ?
存储系统(和主内存)倾向于使用一个字节作为存储的最小信息块,因此充满标准 ASCII 字符的文件每个字符浪费一位。非英语用户对此表示感谢,因为它允许将 ASCII 扩展到 8 位,提供代码来存储强调的人声和类似的东西。
3) How do I save a file to a kind of ASCII code which has 7 bits per
character ?
只需确保您的所有文件内容都是 ASCII 标准。但是,您不会恢复那些丢失的位。不过,压缩算法可能会利用它来稍微压缩文本文件。
4) Do some softweres still use the ASCII encoding for storing the
information ?
绝大多数软件甚至使用 ASCII 来编码本身不是 ASCII 的内容。值得注意的示例:电子邮件,以及您正在阅读的这一页的 HTML 来源。
1) Ascii 有 128 个值,但它们像大多数计算机数组一样从 0-127 枚举。 0 表示空。
2) 要么 ascii 适合 8 位,要么你正在使用扩展的 8 位版本。
3) 定义你自己的写入字节流的程序,然后你可以自己检查字节。
4) 大多数可读文本都是使用UTF编码的,但是只需要基本字符的东西,比如计算机代码,仍然可以使用ascii。
后退一点…
ASCII 是一种古老的、几乎过时的字符集。也就是说,几乎所有使用的字符集都是 ASCII 的超集并且具有兼容的编码。例如,Unicode 具有 UTF-8 编码,它将前 128 个字符的字节映射为与 ASCII 相同。 Windows-1252 有 251 个字符,前 128 个字符与 ASCII 相同。
许多现代编程环境使用 Unicode(至少对于它们的源代码 and/or 字符串):Java、.NET、XML、HTML、……。
因此,如果您正在读取文件,请不要假设它是 ASCII。而且,如果您正在编写文件,并且您的编程环境使用 Unicode 并且您强制输出为 ASCII,则可能会丢失数据。无论哪种情况,读者和作者都应该知道预期的字符集和编码。
我有几个关于 ASCII 编码的问题:
- 为什么ASCII编码可以定义127个字符?应该是7位,也就是2的7次方就是128,哪里少了一个字符?
- 当我将文本文件保存为 textfile.txt 时,它应该以 ASCII 编码保存,对吗?但是当我在文件中写入 10 个字符时,它有 10 个字节,即 80 位,不应该是 70 吗?
- 如何将文件保存为每个字符有 7 位的 ASCII 码?
- 是否有些软件仍然使用ASCII编码来存储信息?
1) How come there is 127 characters definable in ASCII coding ? It should be 7-bit, which means 2 to the power of 7 which equals 128...where is the one character missing
NUL字符,其ASCII码为0,就是你漏掉的那个。
2) When I save a textfile as a textfile.txt it should be saved in ASCII coding right ? But when I write like 10 characters into the file it has 10 bytes, which is 80 bits, shouldnt it be 70 ?
存储系统(和主内存)倾向于使用一个字节作为存储的最小信息块,因此充满标准 ASCII 字符的文件每个字符浪费一位。非英语用户对此表示感谢,因为它允许将 ASCII 扩展到 8 位,提供代码来存储强调的人声和类似的东西。
3) How do I save a file to a kind of ASCII code which has 7 bits per character ?
只需确保您的所有文件内容都是 ASCII 标准。但是,您不会恢复那些丢失的位。不过,压缩算法可能会利用它来稍微压缩文本文件。
4) Do some softweres still use the ASCII encoding for storing the information ?
绝大多数软件甚至使用 ASCII 来编码本身不是 ASCII 的内容。值得注意的示例:电子邮件,以及您正在阅读的这一页的 HTML 来源。
1) Ascii 有 128 个值,但它们像大多数计算机数组一样从 0-127 枚举。 0 表示空。
2) 要么 ascii 适合 8 位,要么你正在使用扩展的 8 位版本。
3) 定义你自己的写入字节流的程序,然后你可以自己检查字节。
4) 大多数可读文本都是使用UTF编码的,但是只需要基本字符的东西,比如计算机代码,仍然可以使用ascii。
后退一点…
ASCII 是一种古老的、几乎过时的字符集。也就是说,几乎所有使用的字符集都是 ASCII 的超集并且具有兼容的编码。例如,Unicode 具有 UTF-8 编码,它将前 128 个字符的字节映射为与 ASCII 相同。 Windows-1252 有 251 个字符,前 128 个字符与 ASCII 相同。
许多现代编程环境使用 Unicode(至少对于它们的源代码 and/or 字符串):Java、.NET、XML、HTML、……。
因此,如果您正在读取文件,请不要假设它是 ASCII。而且,如果您正在编写文件,并且您的编程环境使用 Unicode 并且您强制输出为 ASCII,则可能会丢失数据。无论哪种情况,读者和作者都应该知道预期的字符集和编码。