2016-08-22 1 views
0

Diese Frage ist ähnlich wie bei anderen, die vorher gepostet wurden. Bei allen Kombinationen funktioniert nichts.BOM auf Unicode setzen U-Code UTF8 perl

Ich brauche meine Excel-Datei in Unicode Utf8 gelesen haben, ich bin versucht, meine bom zu setzen:

my $csv = Text::CSV->new ({binary=>1, eol =>$/}) or die "cannot use CSV: ".Text::CSV->error_diag(); open my $csvFile, ">:encoding(UTF-8)", "teht.csv" or die "teht.csv: $!"; print($csvFile "\x{FEBBBF}");

aber dies wird ein errror und sagt, dass "0xFEBBBF nicht Unicode ist ..."

Alle Informationen, die ich gefunden habe, zeigen an, dass der Code für utf8 print($csvFile "\N{U+FEBBBF}") oder ... "\xFE\xBB\xBF" oder ähnlich lesen sollte.

Is it possible to force Excel recognize UTF-8 CSV files automatically? ist eine Quelle, die das viele Male sagt.

https://stackoverflow.com/a/22711105/6557829 ist eine andere Quelle.

Bis jetzt konnte ich UTF-16 tatsächlich mit der gleichen Druckanweisung arbeiten: print($csvFile "\N{U+FEFF}"); aber das ist mehr Platz, als ich verwenden möchte. Vielen Dank im Voraus für jede Hilfe, die Sie mir geben können.

+0

Stückliste ist U + FEFF, nicht U + FEBBBF. – ikegami

+0

@ikegami U + FEFF ist der Code für utf16 nicht für utf8 –

+1

U + FEFF bedeutet "Unicode Code Point FEFF", und es hat nichts mit UTF-8 oder UTF-16 zu tun. – ikegami

Antwort

2

Die Stückliste ist U + FEFF, nicht U + FEBBBF. Ersetzen

"\x{FEBBBF}" 

mit einem der folgenden:

chr(0xFEFF) 
"\x{FEFF}" 
"\N{U+FEFF}" 
"\N{BOM}" 

Dies wird eine Zeichenkette mit einem Zeichen erstellen (FEFF), die print kodieren wird mit UTF-8 wie gewünscht (EF BB BF).

+0

das sollte für UTF-16-Codierung sein, aber ich bin auf der Suche nach utf8 Ich sagte, wie das funktioniert, wenn ich eine der ersten beiden Optionen, die Sie empfohlen, aber ich meine 8 Bits nicht 16 –

+0

haben Sie es versucht? Du hättest gesehen, dass du dich irrst. Siehe den hinzugefügten Absatz. – ikegami

Verwandte Themen