gpt4 book ai didi

ruby-on-rails - ASCII-8BIT 中的 Rails 编码

转载 作者:行者123 更新时间:2023-12-04 06:14:53 26 4
gpt4 key购买 nike

我知道这已经被问过好几次了,但对我来说发生了一些奇怪的事情:

我有一个索引 View ,其中渲染某些字符(带重音的字母)会导致 Rails 引发异常

incompatible character encodings: ASCII-8BIT and UTF-8

所以我检查了我的字符串编码,这实际上到处都是 ASCII-8BIT,即使我在 application.rb 中将正确的编码设置为 UTF-8
config.encoding = "utf-8"

在我的 environment.rb 中
Encoding.default_external = Encoding::UTF_8
Encoding.default_internal = Encoding::UTF_8

在我的数据库中它出现:
character_set_database = utf-8

正如一些指南中所建议的那样。

字符串与 textarea 字段一起插入,并且不会连接到任何其他已插入的字符串。

奇怪的是:
  • 这仅发生在索引 View 中,而这不会发生在节目中(相同资源)
  • 这只发生在这个模型(这是一封电子邮件,有主题和正文,但这不应该影响任何事情)
  • 在我的开发环境中一切顺利设置 str.force_encoding('utf-8') ,而在我的生产环境中这不起作用。 (我使用 Ruby 2.0.0,生产 Ruby 2.1.0,Rails4 和 MySql)
  • 使用 # encoding utf-8 设置文件 View 也不起作用
  • 正在尝试 str.force_encoding('ascii-8bit').encode('utf-8')Encoding::UndefinedConversionError "\xC3" from ASCII-8BIT to UTF-8这是一个 à , 同时使用 body.force_encoding('ascii-8bit').encode('UTF-8', :invalid => :replace, :undef => :replace, :replace => '?') , 用 ? 替换所有重音字符,而 str.force_encoding('iso-8859-1').encode('utf-8')显然会生成错误的字符(a ? )。

  • 所以我的问题是2:
    - 为什么 Rails 将字符串编码设置为 ascii-8bit?
    - 如何解决这个问题?

    我已经检查过这些问题(rails4 的最新问题):

    Rails View Encoding Issues

    "\xC2" to UTF-8 in conversion from ASCII-8BIT to UTF-8

    How to convert a string to UTF8 in Ruby

    Encoding::UndefinedConversionError: "\xE4" from ASCII-8BIT to UTF-8

    还有其他资源,但没有任何效果。

    最佳答案

    您的源代码中可能有一个字符串文字,然后您也可以连接另一个字符串。例如:

    some_string = "this is a string"

    甚至
    some_string = "" #empty string

    这些字符串,存储在 some_string , 将被标记为 ASCII_8BIT,如果您稍后执行以下操作:
    some_string = some_string + unicode_string

    然后你会得到错误。也就是说,除非您在创建字符串文字的文件顶部添加,否则这些字符串将被标记为 ASCII-8BIT:
    #encoding: utf-8

    该声明确定了源代码中字符串文字将具有的默认编码。

    我只是猜测,因为这种模式是这个问题的常见根源。要确定地了解更多信息,它需要比您的问题更多的信息——它需要调试实际的源代码,当您希望它被标记为 UTF-8 时,确切地找出标记为 ASCII-8BIT 的字符串,以及该字符串的确切来源。

    关于ruby-on-rails - ASCII-8BIT 中的 Rails 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22248902/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com