/ / Ruby: nekompatibilná zhoda regulárneho kódovania - ruby

Ruby: nekompatibilné kódovanie regexp zápas - rubín

Mám problém, ktorý Ruby odmietarozdeliť reťazec, ktorý obsahuje určitý latinský znak (a pravdepodobne by mal problémy s ostatnými). Viem o tejto konkrétnej chybe veľa príspevkov, ale žiadna z odpovedí pre mňa nefungovala.

Problém som zovrel na nasledujúci príklad. Toto je celý skript, ktorý spôsobuje problém. Samotný skript je v utf-8.

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

Tento znak v druhom riadku je latinčinamalé e s akútnym. (Áno, viem, že pretože reťazec neobsahuje reťazec „x“, nedá sa veľa rozdeliť, je to len príklad na vytvorenie chyby.)

Toto je chybové hlásenie, slovo zabalené pre vašu bezpečnosť a pohodlie:

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

Pokúsil som sa kódovať reťazec bezvýsledne. Ani jeden z nasledujúcich riadkov nepomáha:

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

alebo

str = str.force_encoding(Encoding::UTF_8)

Tu je verzia Ruby I pomocou:

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

Akákoľvek pomoc je vítaná.

odpovede:

1 pre odpoveď č. 1

Stačí zakódovať regulárny výraz v utf-8:

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

dokumentácia: https://ruby-doc.org/core-2.3.1/Regexp.html#class-Regexp-label-Encoding