【发布时间】:2013-04-18 04:27:09
【问题描述】:
我正在编写一个程序来“手动”将 csv 文件排列为正确的 JSON 语法,使用一个简短的 Python 脚本。从输入文件中,我使用 readlines() 将文件格式化为行列表,我对其进行操作并合并为单个字符串,然后将其输出到单独的 .txt 文件中。但是,输出包含乱码,而不是输入文件中存在的希伯来语字符,并且输出是水平双倍行距的(在每个字符之间添加一个空白字符)。据我所知,问题与编码有关,但我无法弄清楚是什么。当我检测到输入和输出文件的编码(使用.encoding 属性)时,它们都返回None,这意味着它们使用系统默认值。技术细节:Python 2.7、Windows 7。
虽然有很多关于这个主题的问题,但我没有找到我的问题的直接答案。 在这种情况下,检测系统默认值对我没有帮助,因为我需要程序是可移植的。
代码如下:
def txt_to_JSON(csv_list):
...some manipulation of the list...
return JSON_string
file_name = "input_file.txt"
my_file = open(file_name)
# make each line of input file a value in a list
lines = my_file.readlines()
# break up each line into a list such that each 'column' is a value in that list
for i in range(0,len(lines)):
lines[i] = lines[i].split("\t")
J_string = txt_to_JSON(lines)
json_file = open("output_file.txt", "w+")
json_file.write(jstring)
json_file.close()
【问题讨论】:
-
值得注意的是,在Python中处理文件时,最好使用the
withstatement。 -
你知道输入文件的编码是什么吗?
-
@PauloBu 他正在阅读希伯来语字符,但他在他的程序中使用 ASCII。这很可能是问题所在。
-
什么版本的 Python?
-
我很高兴。如果您想了解一些背景知识向您的领导解释这些链接将非常有帮助,特别是第一个:joelonsoftware.com/articles/Unicode.html、stackoverflow.com/questions/3951722/… 和 stackoverflow.com/questions/643694/utf-8-vs-unicode