Символ с кодированием UTF8 не имеет никакого эквивалента в WIN1252

Вот некоторый код Perl, который я просто взломал вместе быстро.

my($sign,$coeffl,$coeffr,$exp) = $str =~ /^\s*([-+])?(\d+)(\.\d*)?e([-+]?\d+)\s*$/;

my $shift = length $coeffl;
$shift = 0 if $shift == 1;

my $coeff =
  substr( $coeffl, 0, 1 );

if( $shift || $coeffr ){
  $coeff .=
    '.'.
    substr( $coeffl, 1 );
}

$coeff .= substr( $coeffr, 1 ) if $coeffr;

$coeff = $sign . $coeff if $sign;

$exp += $shift;

say "coeff: $coeff exponent: $exp";
31
задан Stefan Steiger 24 August 2015 в 09:48
поделиться

3 ответа

Что вы делаете, когда получаете это сообщение? Вы импортируете файл в Postgres? Как сказал devstuff, это персонаж спецификации. Это символ, который Windows записывает первым в текстовый файл, когда он сохраняется в кодировке UTF8 - это невидимый символ нулевой ширины, поэтому вы не увидите его при открытии в текстовом редакторе.

Попробуйте выполнить откройте этот файл, например, в Блокноте, сохраните его в кодировке ANSI и добавьте (или замените аналогичный) , установите client_encoding в строку «WIN1252» в вашем файле.

8
ответ дан 27 November 2019 в 22:27
поделиться

Не выделяйте символы, они настоящие и используются по уважительным причинам. Вместо этого создайте Win1252.

6
ответ дан 27 November 2019 в 22:27
поделиться

Это похоже на последовательность байтов 0xBD, 0xBF, 0xEF как целое число с прямым порядком байтов. Это закодированная в UTF8 форма символа метки порядка байтов (BOM) Unicode 0xFEFF.

Я не уверен, что такое нормальное поведение Postgre, но BOM обычно используется только для обнаружения кодировки в начале входной поток и обычно не возвращается как часть результата.

В любом случае ваше исключение связано с тем, что эта кодовая точка не имеет отображения в кодовой странице Win1252. Это будет происходить и с большинством других нелатинских символов, например, используемых в азиатских шрифтах.

Можно ли изменить кодировку базы данных на UTF8 вместо 1252? Это позволит вашим столбцам содержать практически любой символ.

1
ответ дан 27 November 2019 в 22:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: