Вот некоторый код 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";
Что вы делаете, когда получаете это сообщение? Вы импортируете файл в Postgres? Как сказал devstuff, это персонаж спецификации. Это символ, который Windows записывает первым в текстовый файл, когда он сохраняется в кодировке UTF8 - это невидимый символ нулевой ширины, поэтому вы не увидите его при открытии в текстовом редакторе.
Попробуйте выполнить откройте этот файл, например, в Блокноте, сохраните его в кодировке ANSI и добавьте (или замените аналогичный) , установите client_encoding в строку «WIN1252»
в вашем файле.
Не выделяйте символы, они настоящие и используются по уважительным причинам. Вместо этого создайте Win1252.
Это похоже на последовательность байтов 0xBD, 0xBF, 0xEF как целое число с прямым порядком байтов. Это закодированная в UTF8 форма символа метки порядка байтов (BOM) Unicode 0xFEFF.
Я не уверен, что такое нормальное поведение Postgre, но BOM обычно используется только для обнаружения кодировки в начале входной поток и обычно не возвращается как часть результата.
В любом случае ваше исключение связано с тем, что эта кодовая точка не имеет отображения в кодовой странице Win1252. Это будет происходить и с большинством других нелатинских символов, например, используемых в азиатских шрифтах.
Можно ли изменить кодировку базы данных на UTF8 вместо 1252? Это позволит вашим столбцам содержать практически любой символ.