Ich verwende Spreadsheet::ParseExcel
, um eine Excel-Datei wie folgt zu analysieren
Und Werte aus den Zellen wie folgt lesen
%Vor% Das Problem besteht darin, dass bei einem französischen Zeichen, beispielsweise à
, ò
Um sicher zu gehen, dass es beim Parsen keinen Fehler gibt, habe ich
benutzt %Vor% Wenn ich also einen Online-Hex-String-Konverter verwende, bekomme ich à
.
Ich habe es auch versucht
%Vor% aber statt à
erhalte ich +á
Gibt es eine Möglichkeit, die richtigen Zeichen zu erhalten?
Versuchen Sie, die Datei mit einem Formatierer zu analysieren, z. B. der Tabelle :: ParseExcel :: FmtUnicode :
%Vor%Versuchen Sie auch das FmtJapan, seit dem Dokumentation sagt : Der Spreadsheet :: ParseExcel :: FmtJapan Formatierer unterstützt auch Unicode. Wenn Sie mit dem Standard-Formatierer auf Codierungsprobleme stoßen, versuchen Sie es stattdessen.
* UPDATE:
Ich habe es selbst in einer xls-Datei mit griechischen Zeichen versucht, aber es hat nicht mit FmtUnicode oder FmtJapan funktioniert. Ich fand dann diesen Beitrag perlmonks , verwendete das angegebene My::Excel::FmtUTF8
-Modul und arbeitete erfolgreich beim Drucken der Werte einer Zelle mit $cell->value()
.
Ich habe versucht, was du beschreibst und das funktioniert hier richtig, sobald ich die utf-8-Ausgabe aktiviere. Ich würde vermuten, dass Sie entweder eine seltsame Excel-Datei haben (Sie sollten irgendwo ein Beispiel veröffentlichen), oder dass Ihr Terminal schlecht konfiguriert ist.
Der Umgang mit Problemen mit Zeichensätzen ist schwierig, weil Ihr Terminal Sie verwirren kann. Es ist also immer eine gute Idee, die Ausgabe in 'od -c' zu pipen, um zu sehen, was Sie bekommen. In meinem Skript bekomme ich diesen Text aus einer Tabelle, die ich herumliegen hatte:
%Vor%Und wenn ich es durch od:
pipse %Vor%Ich kann sehen, dass das ó zwei Bytes lang ist, was darauf hindeutet, dass UTF-8 ist. Um sicherzugehen, können Sie iconv bitten, vom erwarteten Ausgabe-Zeichensatz zu dem zu konvertieren, was Sie in Ihrem Terminal verwenden:
%Vor%Wenn die Eingabe nicht korrekt ist, utf-8, bellt es Sie an und / oder gibt sogar noch mehr Müll aus.