0

我有一个 api,我使用 json 在自然语言处理上下文中放入和取出东西。

一切都以 unicode 形式出现。例如,如果从我的 api 中检索单词列表,则每个单词都是 u''。这是打印到文件后 json 输出的样子:

{u'words': [u'every', u'single', u'word']}

我必须澄清,在终端中一切看起来都很好,只是当我将输出打印到文件时。

我还没有弄清楚这是否是更可取的默认行为,或者我是否需要在此过程中做一些事情以使这一点变得清晰,或者什么。输出将用于除 python 之外的其他语言,它们需要可读和/或可解析的其他上下文。

很明显,我不了解 python 和 unicode 以及它的方式和位置。

  1. 这在处理 json 时更可取吗?我不应该担心吗?

  2. 我如何关闭它,或者我如何采取额外的步骤(我已经尝试过但无法弄清楚这是在哪里做的)以减少麻烦。

我有很多东西要学,所以任何输入都表示赞赏。

编辑:所有输入都很有用,谢谢。

我误以为 jsonify 做的比我想象的要多。如果我在任务链的早期执行 json.dumps,我会在另一端得到实际的 json。

4

3 回答 3

4

这没有什么问题,你不需要做任何事情。

在 Python 2 中,astr类似于 C 字符串——它只是一个字节序列,有时被错误地假定为 ASCII 文本。它可以包含编码文本,例如 UTF-8 或 ASCII。

unicode类型表示一个实际的文本字符串,类似于 Java String。它是抽象意义上的文本,与特定编码无关。您可以将 a 解码strunicode,或将 a 编码unicodestr

JSON 键和值是字符串——它们不是字节数组,而是文本——因此它们unicode在 Python 中由对象表示。

如果您需要 JSON 输出以用于另一种语言,请使用该json模块从您的字典中生成它:

>>> import json
>>> print json.dumps({u'words': [u'every', u'single', u'word']})
{"words": ["every", "single", "word"]}
于 2012-08-30T23:49:08.763 回答
3

是的,这是更可取的,因为 JSON 被定义为 unicode。

如果您有更具体的问题给您带来麻烦,您应该分享它们,否则如果您对 Unicode(尤其是 Python)感到不舒服,我建议您观看Ned Batchelder 的介绍。我不知道是什么导致这对你造成滋扰,因为我不知道你在用这个 dict 做什么。

于 2012-08-30T23:44:32.517 回答
1

如果您有任何需要,您应该将 python 内部的所有内容保存在 unicode 中。在 python 与其他程序对话的地方,使用它s.encode('UTF-8')来创建一个常规字符串,您可以将其写入文件或套接字或其他任何东西。用于s.decode('UTF-8')将字符串从文件/套接字转换回 unicode。(UTF-8 似乎是一个合理的默认值,但请使用您的协议指定的任何内容。)

于 2012-08-30T23:43:18.353 回答