当前位置: 首页 > 面试题库 >

Python具有挑战性的字符串编码

臧翰采
2023-03-14
问题内容

我有以下提供商列表(俄语):

providers = [u'\u041e\u041e\u041e "\u041a\u0432\u0430\u0440\u0442\u0430\u043b 
            \u041b\u0435\u043e\u043f\u043e\u043b\u0438\u0441"', 
            u'\u0426\u0435\u043d\u0442\u0440\u0430\u043b']

这些显然是在unicode中。以前,要执行SQL SELECT,我正在做:

providers = tuple([str(item) for item in providers])
sql += " WHERE provider IN {} GROUP BY date ORDER BY date ASC".format(repr(providers))
cursor.execute(sql,)

现在,由于列表项使用的是unicode,因此我遇到了UnicodeEncodeError

我将如何正确执行此sql语句?


问题答案:

您不应该.format()用来在sql查询中包含值。改用sql参数:

sql += " WHERE provider IN ({}) GROUP BY date ORDER BY date ASC".format(', '.join(['%s'] * len(providers)))

cursor.execute(sql, providers)

providers原始清单在哪里。

想法是in使用与列表中提供者数量匹配的SQL参数语法,通过测试生成SQL查询:WHERE provider in (%s, %s) ...对于两个提供者的列表。是的,MySQLdb sql参数语法与老式的python格式语法相呼应,但不是同一回事。



 类似资料:
  • 此代码未通过此标准的测试:给定一个字符串,计算以“y”或“z”结尾的单词数——因此“重”中的“y”和“fez”中的'z”计数,而不是“黄色”中的‘y’(不区分大小写)。如果一个单词后面没有一个字母,我们会说一个y或z在单词的末尾。(注意:Character.islet(char)测试char是否为字母。) 我用手跟踪它,但似乎不明白为什么它在许多测试中都不工作。例如,在“day fyyyz”中,它

  • CodingBat中的给定任务sameEnds: 给定一个字符串,返回出现在字符串开头和结尾且不重叠的最长子字符串。例如,sameEnds(“abXab”)是“ab”。 我的解决方案通过了所有测试,除了一个^: 这里有什么问题?我怎样才能修复它?

  • 给定CodingBat中的任务maxBlock: 给定一个字符串,返回字符串中最大“块”的长度。块是相同的相邻字符的运行。 我的解决方案通过了所有测试,除了一个:

  • 问题内容: 我有一个带转义Unicode字符的字符串,我想将其转换为常规Unicode字母。例如: 应该成为 我知道当我打印第一个字符串时它已经显示了。我的问题是我从文件中读取文件名,然后搜索它们。文件中的文件名使用Unicode编码进行转义,当我搜索文件时,我找不到它们,因为它搜索名称中带有名字的文件。 问题答案: 从技术上讲: 自动将其转换为,因此我假设你正在从某个文件中读取字符串。为了将其转

  • 这个问题要求在键盘上键入字符串所需的总时间,用一个手指表示为二维字符矩阵。 输入: 第一行包含n和m作为输入,表示键盘矩阵的维数 接下来的n行包含m个字符,每个字符表示键盘中的字符 下一行将包含字符串S 输出: 说明:手指最初位于键盘的第一个符号,因此按下该键所需的时间为0。之后,新键位于1,1,因此总时间为|1-0||1-0|即2。现在第三个键位于位置1,2,因此移动到该键的总时间为|2-1||

  • 问题内容: 我在寻找Python中的方法。 我想要做: 问题答案: 你可以使用in运算符: