Vij*_*jay 3 ruby character-encoding ruby-2.0
我有这样的字符串"abce\xC3".sub("a","A"),当我执行该行时,我得到以下错误.
ArgumentError: invalid byte sequence in UTF-8
from (irb):20:in `sub'
from (irb):20
from /home/vijay/.rvm/rubies/ruby-2.0.0-p598/bin/irb:12:in `<main>'
Run Code Online (Sandbox Code Playgroud)
有人可以帮我解决这个问题.
由于Arie已经回答了这个错误,因为无效的字节序列 \xC3
如果您使用的是Ruby 2.1 +,您还可以使用String#scrub替换给定替换字符的无效字节.这里:
a = "abce\xC3"
# => "abce\xC3"
a.scrub
# => "abce?"
a.scrub.sub("a","A")
# => "Abce?"
Run Code Online (Sandbox Code Playgroud)
你需要弄清楚你想要的\xC3是什么.它代表了char Ã吗?
您会看到错误,因为\xC3(默认)UTF-8编码中的字节序列不是有效的.您可以先纠正字符串的编码(通过回答上面的问题),然后进行替换.
"abce\xC3".force_encoding("iso-8859-1").sub('a', 'A')
Run Code Online (Sandbox Code Playgroud)
或者,如果编码无关紧要,比如说,您正在处理字节序列而不是字符序列,则可以强制进行编码ASCII-8BIT.
"abce\xC3".force_encoding("ASCII-8BIT").sub('a', 'A')
Run Code Online (Sandbox Code Playgroud)