【发布时间】:2016-09-18 00:49:26
【问题描述】:
在 Python (3.5.0) 中,我想将包含 unicode 符号的字符串(更准确地说,是从维基词典以 JSON 格式检索的 IPA 符号)打印到屏幕或文件中,例如
print("\u02c8w\u0254\u02d0t\u0259\u02ccm\u025bl\u0259n")
正确打印
ˈwɔːtəˌmɛlən
- 但是,每当我在变量中使用字符串时,例如
ipa = '\u02c8w\u0254\u02d0t\u0259\u02ccm\u025bl\u0259n'
print(ipa)
它只是按原样打印出字符串,即
\u02c8w\u0254\u02d0t\u0259\u02ccm\u025bl\u0259n
这没什么帮助。
我已经尝试了几种方法来避免这种情况(比如通过deocde/encode),但都没有帮助。
我不能合作
u'\u02c8w\u0254\u02d0t\u0259\u02ccm\u025bl\u0259n'
因为我已经将字符串作为变量检索(作为正则表达式匹配的结果)并且在我的代码中没有任何地方输入实际文字。
也有可能是我在从JSON结果转换的过程中出错了;到目前为止,我已经使用str(f.read()) 将字节流转换为字符串,通过正则表达式提取了 IPA 部分(并对双反斜杠进行了替换)并将其存储在字符串变量中。
编辑:
这是我到目前为止的代码:
def getIPAen(word):
url = "https://en.wiktionary.org/w/api.php?action=query&titles=" + word + "&prop=revisions&rvprop=content&format=json"
jsoncont = str((urllib.request.urlopen(url)).read())
jsonmatch = re.search("\{IPA\|/(.*?)/\|", jsoncont).group(1)
#print("jsomatch: " + jsonmatch)
ipa = jsonmatch.replace("\\\\", "\\")
#print("ipa: " + ipa)
print(ipa)
用json.loads修改后:
def getIPAen(word):
url = "https://en.wiktionary.org/w/api.php?action=query&titles=" + word + "&prop=revisions&rvprop=content&format=json"
jsoncont = str((urllib.request.urlopen(url)).read())
jsonmatch = re.search("\{IPA\|/(.*?)/\|", jsoncont).group(1)
#print("jsonmatch: " + jsonmatch)
jsonstr = "\"" + jsonmatch + "\""
#print("jsonstr: " + jsonstr)
jsonloads = json.loads(jsonstr)
#print("jsonloads: " + jsonloads)
print(jsonloads)
对于这两个版本,当调用它时
getIPAen("watermelon")
我得到的是:
\u02c8w\u0254\u02d0t\u0259\u02ccm\u025bl\u0259n
有没有办法让字符串打印/写入已经解码,即使作为变量传递?
【问题讨论】:
-
请创建一个简短的完整程序来演示该问题。请将程序及其输出复制粘贴到您的问题中。有关详细信息,请参阅 minimal reproducible example 和更一般的 How to Ask。
-
Here 是一个示例程序,可以产生您想要的输出。
-
@Robᵩ 我将完整代码添加到我的帖子中。这样可以吗? - 我认为它会变得太长了。很抱歉给您带来不便,这是我第一次在这里发帖。对于您的示例程序:谢谢,它有效-实际上我的示例也有效,目前无法重建为什么我认为它没有或在以这种方式解释之前我到底有什么。
标签: python json string unicode