/ / Ruby:互換性のないエンコーディングの正規表現の一致-ruby

Ruby:互換性のないエンコードregexp match - ruby

Rubyが拒否しているという問題があります特定のラテン文字を含む文字列を分割します(おそらく他の文字に問題があるでしょう)。この特定のエラーに関する多くの投稿があることを知っていますが、答えはどれも私にとってはうまくいきませんでした。

問題を次の例に要約しました。問題を生成するスクリプトの全体を次に示します。スクリプト自体はutf-8にあります。

#!/usr/bin/ruby
str = "é"
arr = str.split(/x/sm)

2行目の文字はラテン語です急性の小さな電子。 (はい、文字列には「x」が含まれていないため、実行する分割はあまりないことを知っています。これは単なるエラーを生成するための例です。)

エラーメッセージは次のとおりです。安全性と快適さのために折り返されています。

./dev.rb:3:in `split": incompatible encoding regexp match
(Windows-31J regexp with utf-8 string) (Encoding::CompatibilityError)
from ./dev.rb:3:in `<main>"

文字列を再エンコードして使用できませんでした。次のいずれの行も役に立たない:

str = str.force_encoding("iso-8859-1").encode("utf-8")

または

str = str.force_encoding(Encoding::UTF_8)

以下は、使用しているRubyのバージョンです。

ruby 2.3.1p112 (2016-04-26) [x86_64-linux-gnu]

どんな助けもありがとうございます。

回答:

回答№1は1

utf-8で正規表現をエンコードするだけです。

str = "é"
arr = str.split(/x/mu)
#=> ["é"]

ドキュメンテーション: https://ruby-doc.org/core-2.3.1/Regexp.html#class-Regexp-label-Encoding