Ruby UTF-8-kodning virker ikke i Windows, selv med Magic Comment

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at køre en fil (rubin anyfile.rb i cmd prompt) med følgende indhold:


# encoding: utf-8
puts 'áá'


sker følgende fejl:


invalid multibyte char (UTF-8)


Det lader til, at Ruby ikke forstår den magiske kommentar ...


EDIT: Hvis jeg fjerner '# encoding: utf-8' og kør kommandoprompsen som denne:


ruby-E:UTF-8 encoding.rb


så virker det - nogen ideer?


EDIT2: når jeg kører:


ruby -e 'p [Encoding.default\_external, Encoding.default\_internal]'


jeg har [[# Kodning: CP850, nul]] , måske er min Encoding.default\_external forkert ?!


Miljø:



  • Windows XP (ja, jeg hader også Windows + Ruby)

  • rubin 1.9.2p180 (2011-02-18) [[i386-mingw32]]


Bedste reference


Jeg mener, at dette er et klassisk tilfælde af 'hvis du hører hover, tænk heste, ikke zebraer'.


Fejlmeddelelsen fortæller dig, at du har en bytesekvens i din fil, der ikke er en gyldig UTF-8 multibytsekvens.


Det er helt sikkert muligt at



  Det lader til, at Ruby ikke forstår den magiske kommentar ...



som du siger, og indtil nu har ingen bemærket, at magiske kommentarer ikke virker, fordi du er den første person i menneskehedens historie for faktisk at prøve at bruge magiske kommentarer. (Faktisk er dette ikke Hvis Ruby ikke forstod magiske kommentarer, ville det klage over et ugyldigt ASCII tegn, da ASCII er standardkodningen, hvis der ikke findes nogen magisk kommentar.)


Eller der er faktisk en ugyldig multibyte UTF-8-sekvens i din fil.


Hvad tror du er mere sandsynligt? Hvis jeg var dig, ville jeg tjekke min fil.

Andre referencer 1


Jeg har oplevet lignende problemer fra tid til anden med filer, der ikke blev gemt som UTF-8, selv når den magiske kommentar siger det.


Jeg har fundet ud af, at Ruby 1.9.2 havde problemer med at konvertere UTF-8 korrekt til kodeord 850 og 437, standardindstillingerne for kommandoprompten på Windows.


Jeg anbefaler at du opgraderer til Ruby 1.9.3 (nyeste er patchlevel 125), som løser mange kodingsproblemer, specielt på Windows.


Også for at kontrollere, at din gemte fil ikke indeholder en Unicode BOM (så det er almindeligt UTF) og er korrekt gemt.


For at bekræfte det kan du skifte kodesiden i konsollen til unicode (chcp 65001) og prøve type myscript.rb


Du bør se de accentede bogstaver korrekt.


Sidst men ikke mindst, sørg for at din kommandoprompt bruger en TrueType-skrifttype, så udvidede tegn vises korrekt.


Håber det hjælper.

Andre referencer 2


Prøve


# encoding: iso-8859-1


Ikke alt, hvad ss tekst er utf8.

Andre referencer 3


Er du sikker på at du har valgt 'UTF-8' fra kodnings-dropdownen, når du gemte filen i Notesblok? Jeg har lige prøvet dette på en XP-maskine, og din kodeeksempel fungerede for mig.