【问题标题】:JSON.parse throwing Encoding::UndefinedConversionErrorJSON.parse 抛出 Encoding::UndefinedConversionError
【发布时间】:2014-11-21 21:26:20
【问题描述】:

在 windows 上出现以下错误:

Encoding::UndefinedConversionError: "\xEF" 从 ASCII-8BIT 到 UTF-8

代码:

text = File.open(file, 'r:binary', &:read); #opens file and reads it with r:binary flag
puts text; #works i get here, outputs the below file contents
data = JSON.parse(text.force_encoding(Encoding::UTF_8)); #fails here with above error

注意:我也试过 R:UTF-8。


文件内容:

{
  "Environments": [
    {
      "Environment": "UT",
      "Configuration_Directory": "configs/",
      "Files": [
        {
          "Source": "Web.ENV.config",
          "Destination": "Web.config"
        }
      ]
    },
    {
      "Environment": "UAT",
      "Configuration_Directory": "configs/",
      "Files": [
        {
          "Source": "Web.ENV.config",
          "Destination": "Web.config"
        }
      ]
    },
    {
      "Environment": "Staging",
      "Configuration_Directory": "configs/",
      "Files": [
        {
          "Source": "Web.ENV.config",
          "Destination": "Web.config"
        }
      ]
    },
    {
      "Environment": "Production",
      "Configuration_Directory": "configs/",
      "Files": [
        {
          "Source": "Web.ENV.config",
          "Destination": "Web.config"
        }
      ]
    }
  ]
}

【问题讨论】:

标签: ruby encoding


【解决方案1】:

我遇到了这个问题,原始字符串是带有 BOM 的 UTF-8,但 Ruby 已将其编码为 ASCII-8bit。我将字符串转换为字节数组,然后再转换回字符串,同时强制编码为 UTF-8。

string_value.bytes.pack("c*").force_encoding("UTF-8")

【讨论】:

  • 埃里克你帮我省了很多谷歌搜索
猜你喜欢
  • 1970-01-01
  • 2012-04-11
  • 2017-04-20
  • 2015-09-18
  • 1970-01-01
  • 2014-06-12
  • 2021-05-19
  • 2015-08-10
  • 1970-01-01
相关资源
最近更新 更多