0

我尝试了常见的 lisp hunchentoot-test。

当我上传带有非拉丁符号的 utf-8 文本文件时,上传文件的长度增加了。在完成文件中,插入了每个非拉丁符号的附加字节。我不明白为什么。上一个实验是在 digitalocean 上刚刚启动 ubuntu 系统。安装 emacs、clisp 和 slime。在 swank 中执行:

(ql:quickload "hunchentoot")
(ql:quickload "hunchentoot-test")
(hunchentoot:start (make-instance 'hunchentoot:easy-acceptor:port 4242))

在 127.0.0.1:4242/hunchentoot/test/upload.html 上看到问题就足够了

4

1 回答 1

6

当我上传带有非拉丁符号的 utf-8 文本文件时,上传文件的长度增加了。在完成文件中,插入了每个非拉丁符号的附加字节。我不明白为什么。

根据关于 UTF-8 的维基百科文章(强调添加):

UTF-8 是一种字符编码,能够以 Unicode 编码所有可能的字符或代码点。编码是可变长度的并使用 8 位代码单元。... UTF-8使用一到四个 8 位字节(一组 8 位在 Unicode 标准中称为八位字节)对 Unicode 代码空间中的 1,112,064 个有效代码点(1,114,112 个代码点减去 2,048 个代理代码点)进行编码)。具有较低数值的代码点(即 Unicode 字符集中较早的代码位置,往往更频繁地出现)使用较少的字节进行编码。Unicode 的前 128 个字符与 ASCII 一对一对应,使用与 ASCII 具有相同二进制值的单个八位字节进行编码,从而使有效的 ASCII 文本也成为有效的 UTF-8 编码的 Unicode。

这意味着当您将自己限制为 ASCII 文本时,您将使用每个字符一个字节。但是,一旦您离开 ASCII 领域,您可能会为每个字符使用多个字节。因此,即使您只添加了一个字符,也添加了多个字节。使用 UTF-8,您不能假设“每个字符一个字节”。

于 2015-11-09T21:34:28.220 回答