Igo*_*rra 5 php encode character-encoding
我通过文件导出数据.输出是base64编码数据.
$data = base64_encode(serialize($data));
Run Code Online (Sandbox Code Playgroud)
结果如下:
bGFzcyI6MTp7czo1OiJzZXR1cCI7YTo3Mzp7czoyNToicGFnZXNfY29udGFjdF91c19oZWFkbGlu
Run Code Online (Sandbox Code Playgroud)
所以我想知道什么charset更适合这个数据(纯文本).us-ascii似乎已经足够了,但utf-8似乎总是一个防错的默认值.
header('content-type: text/plain; charset=utf-8');
Run Code Online (Sandbox Code Playgroud)
Eve*_*ert 20
你甚至不需要一个字符集.'text/plain'可能不正确,因为它也不是真正的文本.
即使它与ascii,utf-8,latin1(如ruakh所提到的)兼容,你应该将它视为二进制文件.
更新
我想稍微澄清一下(在所有的downvotes之后,普通人给我一个机会!)
@ dan04:UTF-8是文字,我没说不是.Base64不是,base64也是一种编码,但它可以编码任何二进制序列.Base64的编码方式可以用US-ASCII(因此也包括UTF-8和latin1/ISO-8859)包装它.
Base64仍然只是一个二进制序列,而不是每个定义文本.相同范围的八位字节值用作US-ASCII(并且任何读取US-ASCII的"可打印")这一事实并不能使其成为文本.
这也是Base64没有自己的mimetype的原因.它被认为是内容传输编码.(看吧!)
因此,使用字符串包含的mimetype以及Content-Transfer-Encoding标头为Base64提供服务的实际正确方法.例如,如果您正在编码jpeg,则这是正确的格式.
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Run Code Online (Sandbox Code Playgroud)
这也是为什么我觉得如果你不想对字符串的内容说什么(或者没有这个信息),最好将它视为'通用二进制',例如:
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Run Code Online (Sandbox Code Playgroud)
真的没关系; 您的内容有效US-ASCII,有效UTF-8,有效ISO-8859-1(或我相信,任何 ISO-8859-x),有效Windows-1252等.只是不要把UTF-16或EBCDIC什么的.
(对于它的价值,我会继续使用US-ASCII,因为它甚至完全支持前Unicode计算机,而没有如此明确地将前Unicode字符集设置为ISO-8859-1或者诸如此类;但这确实是一种主观偏好.)
| 归档时间: |
|
| 查看次数: |
16811 次 |
| 最近记录: |