MySQLのutf8mb4
エンコーディングは、世界がUTF-8
と呼ぶものです。
MySQLのutf8
エンコーディングはBMP(文字U + 0000〜U + FFFFを意味します)の文字のみをサポートするUTF-8
のサブセットです。
Reference
ので、以下は、問題のサポートされていない文字にマッチします:
1:ここでは
/[^\N{U+0000}-\N{U+FFFF}]/
はあなたの入力をきれいに使用できる3つの異なる技術であるサポートされていない文字を削除します。
s/[^\N{U+0000}-\N{U+FFFF}]//g;
2:Re
s/[^\N{U+0000}-\N{U+FFFF}]/\N{REPLACEMENT CHARACTER}/g;
3:U + FFFDでサポートされていない文字を配置変換マップ使用してサポートされていない文字を置き換えます。たとえば、
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;
を
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;
出力:
C = -2.4‰ ± 0.3‰; H = -57‰
εC = -2.4‰ ± 0.3‰; εH = -57‰
私はあなたが求めていることを聞いていますが、なぜ列を 'CHARACTER SET utf8mb4'に変換しないのですか? –