2016-08-22 2 views
0

Этот вопрос аналогичен другим, которые были опубликованы ранее. однако попытка всех комбинаций ничего не работает.Установка спецификации на Unicode U-код UTF8 perl

Мне нужно, чтобы мой файл Excel чтения в Unicode UTF8, я пытаюсь установить мой бом:

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}");

однако это получает errror и говорит, что «0xFEBBBF не Unicode ...»

вся информация, которую я нашел, указывает, что код для utf8 должен читать print($csvFile "\N{U+FEBBBF}") или ... "\xFE\xBB\xBF" или аналогичный.

Is it possible to force Excel recognize UTF-8 CSV files automatically? - один источник, который говорит это много раз.

https://stackoverflow.com/a/22711105/6557829 - еще один источник.

До сих пор я действительно мог заставить UTF-16 работать с тем же заявлением печати: print($csvFile "\N{U+FEFF}"); однако это больше пространства, чем я хотел бы использовать. Заранее благодарим за любую помощь, которую вы можете мне дать.

+0

Спецификация U + FEFF, а не U + FEBBBF. – ikegami

+0

@ikegami U + FEFF - это код для utf16 не для utf8 –

+1

U + FEFF означает «Unicode Code Point FEFF», и он не имеет ничего общего с UTF-8 или UTF-16. – ikegami

ответ

2

Спецификация U + FEFF, а не U + FEBBBF. Заменить

"\x{FEBBBF}" 

с любым из следующих:

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

Это создаст строку с одного символа (FEFF), который print будет кодировать с использованием UTF-8 в соответствии с просьбой (EF BB BF).

+0

, который должен быть для кодирования utf-16, но я ищу utf8. Я говорил, как это работает, когда я выполняю оба из первых двух вариантов, которые вы рекомендовали, но я имею в виду использовать 8 бит не 16 –

+0

Вы попробовали? Вы бы увидели, что ошибаетесь. См. Добавленный абзац. – ikegami

Смежные вопросы