Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.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 如何将反斜杠特殊符号解码为UTF-8_Ruby_Encoding_Utf 8 - Fatal编程技术网

Ruby 如何将反斜杠特殊符号解码为UTF-8

Ruby 如何将反斜杠特殊符号解码为UTF-8,ruby,encoding,utf-8,Ruby,Encoding,Utf 8,我在数据库中有一个文本,它存储为:\xE2\x82\xac50 重要提示:存储在数据库中的符号不是UTF字节,而是符号:“斜杠”、“字母x”、“字母E”等。。因此,Ruby表示将是“\\xE2\\x82\\xac50”(双斜杠,而不是单斜杠) 如何将此字符串转换为欧元50: > xx = "\\xE2\\x82\\xAC" "\\xE2\\x82\\xAC" > xx.bytes [92, 120, 69, 50, 92, 120, 56, 50, 92, 120, 65, 67]

我在数据库中有一个文本,它存储为:
\xE2\x82\xac50

重要提示:存储在数据库中的符号不是UTF字节,而是符号:“斜杠”、“字母x”、“字母E”等。。因此,Ruby表示将是
“\\xE2\\x82\\xac50”
(双斜杠,而不是单斜杠)

如何将此字符串转换为
欧元50

> xx = "\\xE2\\x82\\xAC"
"\\xE2\\x82\\xAC"
> xx.bytes
[92, 120, 69, 50, 92, 120, 56, 50, 92, 120, 65, 67]
这不起作用:

xx.force_encoding('utf-8')
xx.encode('utf-8')
xx.force_encoding('binary').force_encoding('utf-8')
xx.encode('ASCII-8BIT').encode('utf-8')
这不是一个“在Ruby中”的东西,而是关于理解你所看到的以及字符串和转义字符是如何工作的

思考这个问题:

"\\xE2\\x82\\xAC" # => "\\xE2\\x82\\xAC"
'\xE2\x82\xAC' # => "\\xE2\\x82\\xAC"

"\xE2\x82\xAC" # => "€"
第三种方法是如何定义创建欧元符号字符的字节。前两种是使用文字反斜杠编写字符串的两种不同方式

如果您已将数据正确存储在数据库中,则将正确检索数据。您正在使用的DB驱动程序负责转换为该语言使用的字符串,因此在检索字段后,它对您应该是透明的

当前的Rubies默认使用UTF-8,因此没有必要尝试将字符串强制为UTF-8,只需正确定义它即可

在学习特殊情况以及单引号字符串与双引号字符串的行为方式不同之前,处理字符串中的字符转义将令人困惑。通过阅读维基百科的“”文章,您可以找到有关转义的更多信息。这些信息适用于几乎所有的语言,不仅仅是Ruby。

这不是“在Ruby中”的东西,而是关于理解你所看到的以及字符串和转义字符是如何工作的

思考这个问题:

"\\xE2\\x82\\xAC" # => "\\xE2\\x82\\xAC"
'\xE2\x82\xAC' # => "\\xE2\\x82\\xAC"

"\xE2\x82\xAC" # => "€"
第三种方法是如何定义创建欧元符号字符的字节。前两种是使用文字反斜杠编写字符串的两种不同方式

如果您已将数据正确存储在数据库中,则将正确检索数据。您正在使用的DB驱动程序负责转换为该语言使用的字符串,因此在检索字段后,它对您应该是透明的

当前的Rubies默认使用UTF-8,因此没有必要尝试将字符串强制为UTF-8,只需正确定义它即可


在学习特殊情况以及单引号字符串与双引号字符串的行为方式不同之前,处理字符串中的字符转义将令人困惑。通过阅读维基百科的“”文章,您可以找到有关转义的更多信息。这些信息适用于几乎所有的语言,不仅仅是Ruby。

目前只有一个丑陋的“转换器”


欢迎更优雅的解决方案

,因为现在只有一个丑陋的“转换器”


更优雅的解决方案受到欢迎

Stackoverflow的评论编辑器对于富文本来说并不方便,所以这里有一些技术细节:我知道,键入一个斜杠将给出正确的结果,因为ruby将正确解释它。虽然问题是存储在数据库中的符号不是UTF字节,而是符号:“斜杠”、“字母x”、“字母E”等。Stackoverflow的注释编辑器对于富文本来说并不方便,所以这里有一些技术细节:我知道,键入单斜杠将给出正确的结果,因为ruby将正确解释它。尽管问题是存储在数据库中的符号不是UTF字节,而是符号:“斜杠”、“字母x”、“字母E”等。
“\\xE2\\x82\\xAC.gsub(/\\x([0-9A-F]{2})/){$1.hex.chr}
“\\xE2\\x82\\xAC.gsub(/\\x([0-9A-F]{2})/){$1.hex.chr}