Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.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
为什么';当mysql检测到无效编码时,ruby是否检测到无效编码?_Mysql_Ruby_Utf 8_Internationalization_Utf8mb4 - Fatal编程技术网

为什么';当mysql检测到无效编码时,ruby是否检测到无效编码?

为什么';当mysql检测到无效编码时,ruby是否检测到无效编码?,mysql,ruby,utf-8,internationalization,utf8mb4,Mysql,Ruby,Utf 8,Internationalization,Utf8mb4,我正在从YouTube上拉一些RSS源,它们的UTF8无效。我可以使用 bad_utf8 = "\u{61B36}" bad_utf8.encoding # => #<Encoding:UTF-8> bad_utf8.valid_encoding? # => true 在将这些无效的编码发送到MySQL之前,如何检测或修复它们?可能是因为代码点不在 这是MySQL在其“utf8”字符集中允许的唯一字符 较新版本的mysql有另一个名为“utf8mb4”的字符集 但你可能

我正在从YouTube上拉一些RSS源,它们的UTF8无效。我可以使用

bad_utf8 = "\u{61B36}"
bad_utf8.encoding # => #<Encoding:UTF-8>
bad_utf8.valid_encoding? # => true

在将这些无效的编码发送到MySQL之前,如何检测或修复它们?

可能是因为代码点不在 这是MySQL在其“utf8”字符集中允许的唯一字符

较新版本的mysql有另一个名为“utf8mb4”的字符集


但你可能不想用它。仔细考虑你的用例。很少有真正的人类语言(如果有的话)使用BMP之外的字符。

我不依赖Ruby的内置字符串。有效的\u编码?,因为以下也是可能的:

irb
1.9.3-p125 :001 > bad_utf8 = "\u{0}"
 => "\u0000" 
1.9.3-p125 :002 > bad_utf8.valid_encoding?
 => true 
1.9.3-p125 :003 > bad_utf8.encoding
 => #<Encoding:UTF-8>
irb
1.9.3-p125:001>坏_utf8=“\u{0}”
=>“\u0000”
1.9.3-p125:002>错误的utf8。有效的编码?
=>正确
1.9.3-p125:003>错误编码
=> #
这是有效的UTF-8(参考:),但我发现字符串中出现空字符通常是对以前转换错误的提示(例如,当从html页面中发现的无效编码信息进行代码转换时)

我为“Modified UTF-8”创建了自己的验证函数,它可以使用:bmp_only选项将验证限制在基本多语言平面(0x1-0xffff)上。这对于大多数现代语言来说已经足够了(参考:)


在这里找到验证器:

所以我认为问题可能是MySQL只支持基本的多语言平面,而ruby支持一切。ruby支持一切?从什么时候开始?\u0000有效。它被排除在Java DataInput/DataOutput使用的“修改的UTF-8”上下文中,这是正确的。上面的要点使用了改进的UTF-8,我将在这里做一个注释,使其更清楚。
irb
1.9.3-p125 :001 > bad_utf8 = "\u{0}"
 => "\u0000" 
1.9.3-p125 :002 > bad_utf8.valid_encoding?
 => true 
1.9.3-p125 :003 > bad_utf8.encoding
 => #<Encoding:UTF-8>