Ruby 1.9.2 Zeichenkodierung: ungültiges Multibyte-Zeichen: /? /

  • Ich versuche zu verstehen, warum dieses Codefragment in Ruby 1.9.2 nicht funktioniert. Ich versuche auch herauszufinden, wie es geändert werden sollte, damit es funktioniert. Hier ist der Ausschnitt:

     ruby-1.9.2-p290 :009 > str = "hello world!"
     => "hello world!" 
    ruby-1.9.2-p290 :010 > str.gsub("\223","")
    RegexpError: invalid multibyte character: /?/
        from (irb):10:in `gsub'
     
    30 January 2014
    mu is too short
1 answer
  • Ihr Ruby befindet sich im UTF-8-Modus, aber "\223" ist kein gültiger UTF-8-String. Wenn Sie sich in UTF-8 befinden, bedeutet jedes Byte mit dem achten Bit, dass Sie sich in einem Multi-Byte-Zeichen befinden und weitere Bytes lesen müssen, um das vollständige Zeichen zu erhalten. Das bedeutet, dass "\223" nur ein Teil eines UTF-8-codierten Zeichens ist, daher Ihr Fehler.

    0223 und 0224 (147 und 148 Dezimalstellen) sind "intelligente" Anführungszeichen im Windows-1252 Zeichensatz, aber Windows-1252 isn ' t UTF-8. In UTF-8 möchten Sie "\u201c" und "\u201d" als Anführungszeichen verwenden:

     >> puts "\u201c"
    “
    >> puts "\u201d"
    ”
     

    Wenn also Sie versuchen, die Anführungszeichen zu entfernen, dann möchten Sie wahrscheinlich eine der folgenden:

     str.gsub("\u201c", "").gsub("\u201d", "")
    str.gsub(/[\u201c\u201d]/, '')
     
    03 June 2013
    mu is too short