使用Python将日语字符输出到文件

3

目标 --> 我想使用Python自动化查询执行过程。

细节 --> 我的数据源是Teradata数据库,目的地是 .txt 文件。

我正在编写Python代码,以在Teradata中运行查询并将输出保存到.txt文件中。

问题 --> 尽管我能够运行查询并保存输出,但日文字符显示为“\x1a\x1a”。

例如,当我运行查询时,在Teradata SQL Assistant窗口中看到的输出是“愛してる”,而在文本文件中的输出是“\x1a\x1a”
我使用“PYCharm”进行编码
我使用下面的代码编写文件

#!/usr/bin/env python  
# -*- coding: utf-8 -*-  
import io  
import pyodbc  
import os  

#Establish connection with Teradata  
conn = pyodbc.connect('Coneection Parameters')  
conn.setencoding(encoding='utf-8')  
cur = conn.cursor()  
conn.setdecoding(pyodbc.SQL_CHAR, encoding='utf-8')

#Reading Query  
scriptFile = open('query.sql','r')  
script = scriptFile.read()  
scriptFile.close()  

#Executing Query  
cur.execute(script)  
rows = cur.fetchall()  

#Writing the output to file  
with open('results.txt','w') as f:  
   print(rows)  
   f.write('%s\n' % rows)  

#Closing the Connection  
cur.close()#close the query writing  
conn.close() 

使用的变量
results.txt -> 目标文件,我想要写入日语字符

我期望的样本输出为 ペット用品

我在文件“results.txt”中得到的输出 --> [('\x1a\x1a\x1a\x1a\x1a', )]


请确保您发布的代码正确且正确缩进。在此代码中,f未定义,并且for和下一行都没有正确缩进。此外,由于涉及编码,请使用 [tag:python2] 或 [tag:python3] 进行标记,并给出至少一行的确切内容和输出文件。 "愛してる" 不可能变成 "\x1a\x1a\x1a" - \x1a 是替代字符(通常用于编码错误),但是 "愛してる" 有四个字符,而您只有三个替代字符。还请指定您希望文件使用的编码方式(UTF-8?SJIS?EUCJP?)。 - Amadan
感谢您添加注释。 - Swapnil
数据库是否实际配置为以UTF-8存储和返回其结果? - tripleee
实际的错误是rowsrow是两个完全不同的变量,还是你的脚本仍然缺少必要的部分? - tripleee
\x1a 只是 Esc 字符。适当的 Unicode 有一个独特的字符 U+FFFD,用于替换无效或不可表示的字符。 - tripleee
显示剩余3条评论
1个回答

9

我们来解决标题问题。要将日语(或任何语言)输出到文件中,需遵循以下步骤:

  1. 使用 Unicode 字符串。
  2. 打开文件并指定编码格式。
  3. 将字符串写入文件。

以下是使用 Python 3 的示例:

s = 'ペット用品'
with open('results.txt','w',encoding='utf8') as f:
    f.write(s)

您的rows不是Unicode字符串,而是一个带有错误字符串元组的列表。这是您需要解决的另一个问题。


谢谢,您发布的示例有效。现在我能够将日语字符写入文件了。 - Swapnil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接