如何从字符串中删除MySQL的utf8字符集不支持的字符?换句话说,具有四个字节的字符,例如"ε",仅由MySQL的utf8mb4字符集支持。
例如
𝜀C = -2.4‰ ± 0.3‰; 𝜀H = -57‰
应该成为
C = -2.4‰ ± 0.3‰; H = -57‰
我想将数据文件加载到具有CHARSET=utf8
的 MySQL 表中。
>MySQL的utf8mb4
编码就是世人所说的UTF-8
。
MySQL 的utf8
编码是仅支持 BMP 中的字符(即字符 U+0000 到 U+FFFF 包括)的UTF-8
子集。
参考
因此,以下内容将匹配有问题的不受支持的字符:
/[^N{U+0000}-N{U+FFFF}]/
以下是您可以使用清理输入的三种不同技术:
1:删除不支持的字符:
s/[^N{U+0000}-N{U+FFFF}]//g;
2:将不支持的字符替换为 U+FFFD:
s/[^N{U+0000}-N{U+FFFF}]/N{REPLACEMENT CHARACTER}/g;
3:使用翻译映射替换不支持的字符:
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‰