{cd1>我们考虑使用什么编码?为什么有时候string.encode('utf-8') != bytes(map(ord, string))
是真的?在
当客户端javascript与django1.5(python3)应用程序交互时,我遇到了这个问题。在
基本上,我使用ajax和jDataView以字符串形式上传mp3文件(我找不到直接上传文件的解决方案)。我使用jDataView将文件转换为字符串。在我的Django应用程序中,当我保存文件时,它会改变大小。但是,如果不使用string.encode('utf-8')
我使用bytes(map(ord, string))
文件保存得很好。为什么?为什么string.encode('utf-8') != bytes(map(ord, string))
?在
我的客户端代码如下所示:
function send(file) {
var reader = new FileReader();
reader.onload = function(event) {
var self = this;
$.ajax({
url: 'upload/',
type: 'POST'
data: {contents: (new jDataView(self.result)).getString()}
});
}
reader.readAsArrayBuffer(file);
}
我的观点是这样接收数据的:
^{pr2}$我检查了JS代码和Python代码中的contents
是同一件事。它们具有相同的字节长度,并且从适合我屏幕的前几个字符和最后几个字符来看,它们似乎具有相同的内容。在
如果我把代码改成
^{3}$文件更改大小,不再是有效的mp3文件。在
UTF-8不会将Unicode码位直接映射到字节。只有在U+0000到U+007F范围内的ASCII码位才是这样。超过这个范围,UTF-8每个码位使用2个或更多字节:
您考虑的是拉丁语-1编码,其中U+0000到U+00FF的代码点直接映射到字节:
^{pr2}$与文本编码不同,您可以在存储之前对二进制数据进行base64编码,也可以升级到django1.6或更高版本,以使用binary field type。在
相关问题 更多 >
编程相关推荐