当我将一个json文件加载到python中时,只要将该文件视为字符串,编码就没有问题。但是,使用json.load文件文件或json.loads在字符串中,所有空格字符都显示为“\xa0”
下面的代码生成正常的结果,打印json字符串时没有任何奇怪的“\xa0”符号。在
with open(json_path) as f:
lines = f.readlines()
for line in lines:
print(line)
将文件加载为json格式,突然间空格字符被解释为“\xa0”。在
^{pr2}$给出以下内容:
dict_keys(['1.\xa0\lorem\xa0ipsum', '2.\xa0\lorem\xa0ipsum\xa0\lorem\xa0ipsum', '3.\xa0\lorem', '4.\xa0\lorem\xa0ipsum', '5.\xa0\lorem\xa0ipsum'])
加载字符串而不是使用json.loads得出相同的结果:
with open(json_path) as f:
lines = f.read()
data = json.loads(s)
print(data.keys())
我正在使用java和pdf-box构建一个pdf解析器。将标题结构解析到我自己的json树中。我尝试过将json文件转换成java中的Hashmap,它工作得很好,因此json文件本身似乎没有任何奇怪之处。python有什么特别的解释吗?在
假设:
那么你得到的输出是完全正确的。在
第一段代码读取并打印字符串:
当您打印一个字符串时,它的输出或多或少是不变的,并且非中断空格看起来与常规空格相同。在
第二段代码解析JSON文件,从而创建字典,然后打印字典键。为了便于解释,假设字典本身是打印的(而不是键):
^{pr2}$以dictionary作为参数调用print将调用字典的
__str__
函数。__str__
函数使用它自己的规则来格式化输出,例如,它将字典括在大括号中,添加单引号等如果研究输出,您可能会发现打印字典会为字典创建有效的Python代码。在
在Python字符串中,某些字符需要转义。转义序列以反斜杠开头。一个典型的例子是换行符:
输出:
显然,
__str__
字典逻辑的一部分是也要转义非中断空格,因为它们无法从视觉上与常规空间区分开来(即使这不是严格必要的)。在Python中,正确的转义方法是\a0
。在所以一切都按计划进行。这是一个特性,不是一个bug。在
相关问题 更多 >
编程相关推荐