如何检查字符串是否包含ASCII代码

sbs*_*sbs 3 ruby string utf-8

给定一个字符串A\xC3B,可以通过执行此操作将其转换为utf-8字符串(ref link):

"A\xC3B".force_encoding('iso-8859-1').encode('utf-8') #=> "AÃB"
Run Code Online (Sandbox Code Playgroud)

但是,我只想在字符串包含ASCII代码时执行操作,即\xC3.我该如何检查?

尝试"A\xC3B".include?("\x")但它不起作用.

cre*_*mno 5

\x只是一个十六进制的转义序列.它与编码本身无关.US-ASCII从进入"\x00""\x7F"(例如"\x41"是一样的"A","\x30""0").其余("\x80"to "\xFF")不是US-ASCII字符,因为它是一个7位字符集.

如果要检查字符串是否仅包含US-ASCII字符,请调用String#ascii_only?:

p "A\xC3B".ascii_only? # => false
p "\x41BC".ascii_only? # => true
Run Code Online (Sandbox Code Playgroud)

另一个基于您的代码的示例:

str = "A\xC3B"
unless str.ascii_only?
  str.force_encoding(Encoding::ISO_8859_1).encode!(Encoding::UTF_8)
end
p str.encoding # => #<Encoding:UTF-8>
Run Code Online (Sandbox Code Playgroud)