Kodowanie MySQL's utf8mb4
jest tym, co świat nazywa UTF-8
.
Kodowanie MySQL to podzbiór UTF-8
, który obsługuje tylko znaki w BMP (co oznacza znaki U + 0000 do U + FFFF włącznie).
Reference
Więc dodaje się dopasuje nieobsługiwane znaki w pytaniu:
/[^\N{U+0000}-\N{U+FFFF}]/
Oto trzy różne techniki można użyć oczyścić Twój wkład:
1: Usuń znaki nieobsługiwane:
s/[^\N{U+0000}-\N{U+FFFF}]//g;
2: Re umieszczać znaki nieobsługiwane z U + fffd:
s/[^\N{U+0000}-\N{U+FFFF}]/\N{REPLACEMENT CHARACTER}/g;
3: Wymień znaków nieobsługiwanych pomocą mapy tłumaczenie:
my %translations = (
"\N{MATHEMATICAL ITALIC SMALL EPSILON}" => "\N{GREEK SMALL LETTER EPSILON}",
# ...
);
s{([^\N{U+0000}-\N{U+FFFF}])}{ $translations{$1} // "\N{REPLACEMENT CHARACTER}" }eg;
Na przykład,
use utf8; # Source code is encoded using UTF-8
use open ':std', ':encoding(UTF-8)'; # Terminal and files use UTF-8.
use strict;
use warnings;
use 5.010; # say, //
use charnames ':full'; # Not needed in 5.16+
my %translations = (
"\N{MATHEMATICAL ITALIC SMALL EPSILON}" => "\N{GREEK SMALL LETTER EPSILON}",
# ...
);
$_ = "C = -2.4‰ ± 0.3‰; H = -57‰";
say;
s{([^\N{U+0000}-\N{U+FFFF}])}{ $translations{$1} // "\N{REPLACEMENT CHARACTER}" }eg;
say;
wyjściowa:
C = -2.4‰ ± 0.3‰; H = -57‰
εC = -2.4‰ ± 0.3‰; εH = -57‰
Słyszałem, o co pytasz, ale dlaczego nie przekonwertować kolumny na "CHARACTER SET utf8mb4"? –