Ale*_*ani 4 sql postgresql encoding character utf-8
我正在处理一些 UTF8 中的日语文本,除了非常罕见的情况外,它工作得很好。我想在 PostgreSQL 数据库中插入 UTF8 文本(也在 MySQL 上尝试过),但出现此错误:
SQLSTATE[22021]: Character not in repertoire: 7 ERREUR: invalid byte sequence for encoding "UTF8": 0xe3 0x2e 0x2e
Run Code Online (Sandbox Code Playgroud)
我检查了文本的多种方式,它似乎是正确的 UTF8(尝试使用 mb_check_encoding PHP 函数和自制的 C)。我也尝试过很多像这样的在线转换器:http : //encoder.mattiasgeniar.be/index.php
无论如何,我无法检测到什么字符对应于0xe3 0x2e 0x2e
这是日语文本(由 Facebook Graph API 以 UTF8 格式提供):http : //pasted.co/0eaea393
我已经发现 3 个不同的文本(数千个)在尝试插入 SQL 时出现此错误。有问题的字符每次都一样:0xe3 0x2e 0x2e
几个小时后,我现在请求你的帮助......
根据UTF-8规则,3 个字节的有效序列必须是这样的:
1110xxxx 10xxxxxx 10xxxxxx
其中1
,0
是固定位,x
表示可能具有1
或值的位0
。
您的序列0xe3 0x2e 0x2e
是二进制的:
11100011 0 0101110 0 0101110
根据上面的模式,0
我用粗体显示的第一个应该是1
序列有效的a 。0
根据 UTF-8,粗体的第二个也是另一个错误的数字。
所以它是无效的。
此外,phpmb_check_encoding()
也会将其报告为无效,因此您的 php 检查可能是错误的。尝试这个:
<?php
$bytes = pack("H*", "E32E2E");
$res = mb_check_encoding($bytes, "UTF-8");
if ($res)
echo "Valid";
else
echo "Invalid";
?>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5380 次 |
最近记录: |