Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ruby`encode';:&引用\xC3“;从ASCII-8BIT到UTF-8(编码::未定义的转换器错误)_Ruby_Encoding_Utf 8_Iso 8859 1_Ascii 8bit_Sudo_Bash - Fatal编程技术网

ruby`encode';:&引用\xC3“;从ASCII-8BIT到UTF-8(编码::未定义的转换器错误)

ruby`encode';:&引用\xC3“;从ASCII-8BIT到UTF-8(编码::未定义的转换器错误),ruby,encoding,utf-8,iso-8859-1,ascii-8bit,sudo,bash,Ruby,Encoding,Utf 8,Iso 8859 1,Ascii 8bit,Sudo,Bash,tvdb中的汉尼拔插曲中有一些奇怪的角色 例如: Œuf 所以ruby说: ./manifesto.rb:19:in `encode': "\xC3" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError) from ./manifesto.rb:19:in `to_json' from ./manifesto.rb:19:in `<main>' 有没有办法处理这些非utf字符?我宁愿不替换它们,

tvdb中的汉尼拔插曲中有一些奇怪的角色

例如:

Œuf
所以ruby说:

./manifesto.rb:19:in `encode': "\xC3" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError)
    from ./manifesto.rb:19:in `to_json'
    from ./manifesto.rb:19:in `<main>'
有没有办法处理这些非utf字符?我宁愿不替换它们,而是转换它们?还是忽略它们?我不知道,谢谢你的帮助


奇怪的是,脚本通过cron工作得很好。手动运行会产生错误。

似乎应该对对象使用另一种编码。您应该为变量
@tree
设置正确的代码页,例如,使用而不是使用
@tree.force_编码('ISO-8859-1')
。因为
ASCII-8BIT
仅用于二进制文件

要查找ruby的当前外部编码,请发出:

Encoding.default_external
如果解决了此问题,则问题出现在默认代码页(编码)中,因此要解决此问题,您必须通过以下任一方式设置正确的默认代码页(编码):

  • 在ruby中,要将编码更改为或另一种合适的编码,请执行以下操作:

    Encoding.default_external = Encoding::UTF_8
    
  • 在,
    grep
    当前有效设置:

    $ sudo env|grep UTF-8
    LC_ALL=ru_RU.UTF-8
    LANG=ru_RU.UTF-8
    
    然后以类似的方式在
    .bashrc
    中正确设置它们,但不能完全使用
    ru_ru
    语言,例如:

    export LC_ALL=ru_RU.UTF-8
    export LANG=ru_RU.UTF-8
    

  • 我刚刚花了几个小时试图解决一个类似的问题。我检查了我的区域设置、数据库编码以及我能想到的一切,仍然从数据库中获取ASCII-8BIT编码的数据

    事实证明,如果将文本存储在二进制字段中,它将自动作为ASCII-8BIT编码的文本返回,这是有道理的,但是这(显然)会在应用程序中导致问题


    在迁移过程中,可以将列编码改回
    :text

    文件。open(yml_文件,'w')应改为File。open(yml_文件,'wb

    保存到数据库时,我遇到了同样的问题。我会提供一个我使用的东西(也许,这会帮助某人)

    如果您知道有时您的文本有奇怪的字符,那么 在保存之前,您可以将文本编码为其他格式,然后 从数据库返回文本后,再次对其进行解码

    例如:

    string = "Œuf"
    
    在保存之前,我们对字符串进行编码

    text_to_save = CGI.escape(string)
    
    (字符“Œ”编码在“%C5%92”中,其他字符保持不变)

    =>%C5%92uf

    从数据库加载并解码

    CGI.unescape("%C5%92uf")
    

    =>“Œuf”

    将变量
    @tree
    设置为
    @tree
    的适当代码页,如
    ISO-8859-1
    而不是
    ASCII-8BIT
    。强制_编码('ISO-8859-1')。因为
    ASCII-8BIT
    仅用于二进制文件。我猜
    cron
    环境正在以某种方式为您解决默认的输入编码。首先,我认为您的输入实际上是UTF-8(C3是一个常见的字节,在欧洲字符的多字节字符开头可以看到)@МаъСъСъъъъ:在这种情况下,我认为输入可能不是ISO-8859变体,而是错误默认的UTF-8。虽然只有一个样本点没有匹配字符,但它可能是anything@NeilSlater你为什么这么想?iso cp中的字符不是吗?如果sudo解决了问题,那么问题是在默认cp中,请了解默认cp是什么,并在ruby中为默认用户设置它。如下所示:
    Encoding.default\u external=Encoding::UTF\u 8
    将UTF替换为正确的UTF问题中发布的代码不包含一行
    文件。打开(…)
    。那你是什么意思?好吧,这个答案真的帮助了我。如果您将YAML写入这样的文件:
    file.open('/path/to/file.yml',wb'){f | YAML.dump(data,f)}
    ,如果您省略
    b
    ,则标题中会出现错误。这个问题并没有说明打开的文件实际上对我有帮助,因为我遇到了这个错误
    Encoding::unfinedconversioner:“\xC3”当执行
    file.put时,从ASCII-8BIT到UTF-8
    使用
    file=file.open(“response.txt”,“w”)
    打开数据,但添加
    b
    参数后,效果良好。但是如果在这里包含解释@plugandplay,它会派上用场
    CGI.unescape("%C5%92uf")