Python MySQL UTF8编码因执行顺序而异

2024-09-30 01:22:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近继承了一个python项目,我有一些行为我很难解释。在

代码有两个部分,可以将文件导入数据库,也可以将数据库转储到输出文件。导入如下所示:

def importStuff(self):
    mysqlimport_args = ['mysqlimport', '--host='+self.host, '--user='+self.username, '--password='+self.password, '--fields-terminated-by=|', '--lines-terminated-by=\n', '--replace', '--local', self.database, filename, '-v']
    output = check_output(mysqlimport_args)

垃圾堆是这样的:

^{pr2}$

好吧,这不是你见过的最漂亮的python(欢迎使用样式注释,我很乐意了解更多),但这似乎是合理的。在

但是,我接到一个消费者的投诉,说我的输出不是UTF-8格式的(顺便说一下,mysql表使用的是utf8编码)。如果程序是这样执行的,我会迷失方向:

importStuff(...)

getStuff(...)

toCsv(...)

那么输出文件似乎不是有效的utf-8。当我把执行分成两个不同的步骤

importStuff(...)

然后在另一个文件里

getStuff(...)

toCsv(...)

突然,我的输出显示为有效的utf-8。除了我周围有工作,我似乎无法解释这种行为。谁能告诉我我做错了什么吗?或者我能提供更多的信息来澄清到底发生了什么?在

谢谢。在

(Python2.7,以防考虑在内)

编辑:需要更多代码。为了保护无辜的人,比如我的公司,我做了一些小的调整,但或多或少是这样的:

def main():

    dbutil = DbUtil(config.DB_HOST, config.DB_DATABASE, config.DB_USERNAME, config.DB_PASSWORD)
    if(args.import):
        logger.info('Option: --import')

        try:
            dbutil.mysqlimport(AcConfig.DB_FUND_TABLE)
        except Exception, e:
            logger.warn("Error occured at mysqlimport. Error is %s" % (e.message))

    if(args.db2csv):
        try:
            logger.info('Option: --db2csv')
            records = dbutil.getStuff()
            fileutil.toCsv(records, csvfile)
        except Exception, e:
            logger.warn("Error Occured at db2csv. Message:%s" %(e.message))

main()

就这样。它真的很短,这使得它不那么明显。在

我不确定如何准确地表示输出,它看起来像这样:

"F0NR006F8F"

在我看来,它们或多或少都像ASCII字符,所以我不确定它们会造成什么问题。也许我从一个错误的角度来看待这个问题,我目前依赖于我的文本编辑器对文件编码的最佳猜测。我不知道如何最好地检测出是哪个字符导致它停止将我的文件作为utf-8读取。在


Tags: 文件代码selfconfigdbargserrorlogger
1条回答
网友
1楼 · 发布于 2024-09-30 01:22:07

有史以来最愚蠢的回答。输入数据不是UTF-8格式。有人通过编写另一个存储过程来解决这个问题,该存储过程将定期调用以将非utf-8字符转换为utf-8。在我把代码分成两个文件并分别运行它们的时间里,作业运行了。我尝试了4-5次,结果却得出了错误的结论。我现在正在更改读取过程以适应非utf-8输入源,这样系统中就不会隐藏奇怪的争用条件。很抱歉把你们带到了这个愚蠢的阶段。在

相关问题 更多 >

    热门问题