1

Python構造からUnicode文字列を作成しようとしています。このユニコード文字列を特定の構造にして、JavaScriptクライアントで使用できるようにするため、Pythonのデフォルトの文字列変換メソッドを使用したくありません。行でUnicodeDecodeErrorを取得します

dlist_str += unicode(item[key])

私はもう試した

# -*- encoding: utf-8 -*-

ファイルの先頭にあります。私も問題の行を試しました

dlist_str += item[key]

strタイプが自動的にユニコードに変換されることを期待しています。私は何が間違っているのですか?

コードスニペットは次のとおりです。


def convertToString(dlist):
  dlist_str = u'{ '
  for item in dlist:
    dlist_str += item['field_id'] + u': { '
    for key in item:
      dlist_str +=  key + u': '
      dt = str(type(item[key]))
      if dt == "<type 'str'>" or dt == "<type 'unicode'>":
        dlist_str += u"'"
        dlist_str += unicode(item[key])
        dlist_str += u"'"
      elif dt == "<type 'list'>":
        dlist_str += u"["
        for dn in item[key]:
          dlist_str += u"'" + dn + u"',"
        dlist_str += u"]"
      else:
        dlist_str += unicode(item[key])
      dlist_str += u','
    dlist_str += u'},'
  dlist_str += u'}'
  return dlist_str

4

1 に答える 1

3

リストを辞書に変換し、JSON でエンコードするという 2 つのことを同時に行おうとしているようです。

2 つのステップを分離すると、Python 標準ライブラリの JSON Encoder を使用できるようになります。

import json

def convertToString(dlist):
    temp_dict = dict((item['field_id'], item) for item in dlist)
    return json.dumps(temp_dict)
    # or, even shorter, and in Python 2.7/3.2+
    # return json.dumps({item['field_id']: item for item in dlist})

これとは別に、お使いのバージョンでエラーが表示される理由は、Python に推測させるのではなく、"from" エンコーディングを明示的に選択する必要があるためです。何かのようなもの:

dlist_str += item[key].decode('utf-8')

おそらくうまくいくでしょう。

于 2012-12-26T02:13:43.613 に答える