1

JSON ファイルから翻訳された HTML ファイルを生成する Ruby スクリプトを実行すると、ParserError が発生します。JSON ファイルのエンコーディングは ISO-8859-1 ですが、Ruby コードを実行すると次のようになります。

:marker=>true}
C:/Ruby200/lib/ruby/2.0.0/json/common.rb:155:in `parse': 757: unexpected token a
t '{ (JSON::ParserError)
    "de_DE": {
        "1": "HERBST 2013",
        "2": "STILSICHER",
                "3": "Klassisch geschnittene Anzüge",
                "4": "PERFEKT KOMBINIERT",
                "5": "Business hemden mit klasse",
                "6": "HERBST 2013",
                "7": "CASUAL BIS COCKTAIL",
                "8": "Vielseitige Kleider",
                "9": "SPORTIV BIS ELEGANT",
                "10": "Mäntel mit Anspruch",
                "11": "ELEGANZ NACH MASS",
                "12": "Unverwechselbare",
                "13": "PASSGENAU",
                "14": "Perfekt geschnittene Blazer"
    },
    "en_GB": {
        "1": "FALL 2013",
        "2": "PURE STYLE",
...............

なんらかの理由で外字を変更していますか?

私が持っているルビースクリプトでは:

translation_hash = JSON.parse(File.read('translation_master.json').force_encoding("ISO-8859-1").encode("utf-8", replace: nil))

http://rubyfiddle.com/riddles/d17fd

json ファイルは次のとおりです。

http://alexanderloyd.info/json/translation_master.json

4

2 に答える 2

2

まず第一に、私がここで言っていることの著者は、この男jadalaです。

いくつかの背景

Latin1 は、MySQL で使用される文字エンコーディングです。人々はそれが ISO-8859-1 と同等であると誤解していますが、実際には CP-1252 (Windows-1252 としても知られています) です。CP-1252 は ISO-8859-1 のスーパーセットで、いくつかの文字が追加されています (最近では € 記号が含まれています)。

これを適用してみてください:

def fix_cp1252_utf8(text)
    text.encode('cp1252',
        :fallback => {
            "\u0081" => "\x81".force_encoding("cp1252"),
            "\u008D" => "\x8D".force_encoding("cp1252"),
            "\u008F" => "\x8F".force_encoding("cp1252"),
            "\u0090" => "\x90".force_encoding("cp1252"),
            "\u009D" => "\x9D".force_encoding("cp1252")
          })
  .force_encoding("utf-8")
end

ここを見てください:

Ruby で有効な Latin1 および UTF8 エラーを解決する

Ruby 1.9 エンコーディング: Rails の入門書とソリューション

于 2015-08-20T12:25:58.847 に答える
2

ファイルをUTF8として読んでいますか?Ruby 1.9 は、特に指示がない限り、ファイルは UTF-8 であると想定します。

JSON.parse open("input.json", "r:iso-8859-1:utf-8").read

これにより、ファイルに ISO-8859-1 エンコーディングが含まれていることが指定され、読み取り時に UTF-8 にトランスコードされます。

テスト ファイルを提供できる場合は、デバッグを支援する方が簡単な場合があります。

于 2013-07-10T21:19:49.213 に答える