我正在使用python构建一个与python3兼容的web基文件管理器。在
每个文件头都是:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals, absolute_import
然后我发现由于Unicode的原因有问题。在
我的系统是中文的,我有一个名为E:\filemanager\data\c - 副本
的文件夹。在
我使用ajax GET
发送(E:\filemanager\data\c - 副本
)到flask应用程序(filemanager)。当我遇到表示路径不存在的Windows Error[3]
时,我也很困惑。然后我使用pycharm调试代码,看到字符串已经变成了u'E:\\filemanager\\data\\c - \xe5\x89\xaf\xe6\x9c\xac'
,当os.listdir(path)
。在
这根绳子太可怕了。让我展示一下问题:
^{pr2}$在p2
中有一个u
前缀!这使我无法列出目录(因为名称错误)。在
我知道只有去掉u
前缀才能使解码成功。但是如何移除它呢?在
更新:
我要的是皈依
u'E:\\filemanager\\data\\c - \xe5\x89\xaf\xe6\x9c\xac'
到
u'E:\\filemanager\\data\\c - \u526f\u672c'
或{
由于u
前缀,\xe5\x89\xaf\xe6\x9c\xac
无法解码,这是关键问题!在
更新2:
我的ajax代码:
function ajax2(options) {
var querystring = options.params ? urllib.format({ query: options.params }) : ''
if (options.loading)
swalShowLoading();
reqwest({
url: options.url + querystring,
contentType: 'application/json',
method: options.method || 'GET',
data: JSON.stringify(options.data)
})
}
// getFileList
// because this is a `GET` method, so no data be JSON.stringify here
// sorry for wrong explanation before.
ajax2({
url: ApiUrl.list,
params: {
path: encodeURI(path)
},
success:success,
error:error
})
unicode
字符串可以编码到字节str
。str
可以被解码为unicode
字符串。在当您有一个
u''
字符串文本时,或当您import unicode_literals
时,所有的字符串文本都将是unicode
字符串。你只能对那些代码进行编码,而不是decode
。当您尝试decode
一个已经解码的unicode
字符串时,您得到的错误源于隐式转换。在
^{pr2}$\x35…
表示字符串的原始字节(str
)。在这是一个
unicode
文本,字面意思是“\xe5…”。当有原始字节表示时,需要确保Python将其视为
str
,而不是unicode
:前缀
b
将文本标记为str
,可以将其解码为unicode
。在u''
,''
与unicode_literals
和{unicode
→encode
到{b''
和{str
→decode
到{无法解码Unicode字符串。关键问题是UTF-8编码的字节字符串在一开始就被错误地解码了。在
下面是如何逆转它,但你真正应该解决的是为什么一开始就错了。在
latin1
是将前256个Unicode码位直接转换为字节的编解码器:所以“摆脱美国”。现在有一个可以用UTF-8解码的字节字符串:
^{pr2}$相关问题 更多 >
编程相关推荐