print(encoding / edcoding)法语字符在txt文件中有效,但在excel / csv [python]中不正确

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了print(encoding / edcoding)法语字符在txt文件中有效,但在excel / csv [python]中不正确相关的知识,希望对你有一定的参考价值。

我得到了一个带有特殊字符的字符串(应该是法语字符,并且想要使其在csv / excel中正确显示:

s1 = 'Benoît'

# take a look at encoding
print(s1.encode(encoding='utf-8'))

# print to txt
with open("firstname.txt", "w") as text_file:
    print(s1, file=text_file)

# print to csv
import pandas as pd
df = pd.DataFrame({'FirstName': [s1]})
df.to_csv('firstname.csv', index = False)

结果txt文件正确显示了法语,但csv没有显示。

enter image description here

我的问题是如何使csv正确显示? (我可以将法语字符从txt复制到csv,但是如何以编程方式编写csv并正确显示呢?)


更新:感谢@snakecharmerb,我尝试了encoding = 'utf-8-sig'

# try csv with encoding = 'utf-8-sig': doesn't work
df = pd.DataFrame({'a': [s1]})
df.to_csv('firstname.csv', index = False, encoding = 'utf-8-sig')



# read from txt file which seems to display correctly
df = pd.read_table("firstname.txt", header = None)
df
#         0
# 0  Benoît

# then write to csv with encoding = 'utf-8-sig' - works
df.to_csv('firstname1.csv', index = False, encoding = 'utf-8-sig')

enter image description here

答案

Excel不一定会识别该文件已编码为UTF-8。您可以在Excel中打开文件时指定UTF-8作为编码,也可以使用'utf-8-sig'编码写入csv文件。

'utf-8-sig'是Windows特定于版本的Excel,它插入一个三个字符的字节顺序标记*(BOM)和文件的开头。尝试猜测文件编码的Windows应用程序将读取BOM并从UTF-8解码文件。在其他平台上可能无法识别BOM,从而导致文件开头出现三个不寻常的字符。

以上是关于print(encoding / edcoding)法语字符在txt文件中有效,但在excel / csv [python]中不正确的主要内容,如果未能解决你的问题,请参考以下文章

encode 和 decode

bytes与str(encode,decode)

PHP json_encode JSON_PRETTY_PRINT:如何打印不同的格式?

PHP print_r 有效,但 json_encode 返回空 [重复]

2-1os,字串加删

python 编码(encode)解码(decode)问题