字符不在曲目 UTF8

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

几个小时后,我现在请求你的帮助......

Dan*_*ité 5

根据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)