我目前正在尝试使用java将许多小文件中的文本放在一个大文件中。这个大文件在python模块中进一步用于从中提取短语。在此过程中,我收到一个错误,指示无效的utf8文本。一些研究将我带到this error in java,但它没有解决我的问题。
奇怪的是,当我在类似this one的utf8的在线转换器中输入句子时,它也说错了。我使用的字符串是“Brawlers Were Back on Ice and Canvas”。
任何人都可以向我解释为什么会这样吗?
提前致谢!
修改/更新 看起来这个在线工具可能有一个bug。我还在修复python中使用该文件的问题,所以我将展示创建它的代码:
Writer writer = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream("samplefile"), "utf-8"))) {
writer.write(someText);
但这会在python中产生错误,如
UnicodeDecodeError: 'utf8' codec can't decode byte 0xc3 in position 0: unexpected end of data
SecondEdit : 用于处理数据的python代码:
dr = DirRunner(self.dir)
for item in dr:
#open for reading using a buffer
file = open(item, "r", 1);
for line in file.readlines():
yield line
DirRunner只返回一个目录中所有文件和文件夹的列表。
然后在此函数中处理每一行:
def any2utf8(input):
"""
convert a string or object into utf8 encoding
source: http://stackoverflow.com/questions/13101653/python-convert-complex-dictionary-of-strings-from-unicode-to-ascii
usage:
str = "abc"
str_replace = any2utf8(str)
"""
if isinstance(input, dict):
return {any2utf8(key): any2utf8(value) for key, value in input.iteritems()}
elif isinstance(input, list):
return [any2utf8(element) for element in input]
elif isinstance(input, unicode):
return input.encode('utf-8')
else:
return input