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ď č. 1Stačí 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