字符不在剧目UTF8中

时间:2016-02-01 23:36:42

标签: sql postgresql encoding utf-8 character

我正在使用UTF8中的一些日文文本,除了非常罕见的情况外,它的工作非常好。我想在PostgreSQL DB中插入UTF8文本(也在MySQL上试过),但是我收到了这个错误:

SQLSTATE[22021]: Character not in repertoire: 7 ERREUR: invalid byte sequence for encoding "UTF8": 0xe3 0x2e 0x2e

我检查了很多方法文本,看起来是正确的UTF8(尝试使用mb_check_encoding PHP函数和自制的C)。我也尝试了很多像这样的在线转换器:http://encoder.mattiasgeniar.be/index.php

无论如何,我无法检测到哪个字符对应 0xe3 0x2e 0x2e

这是日文文本(由Facebook Graph API以UTF8给出):http://pasted.co/0eaea393

我在尝试在SQL中插入时,已经发现3个不同的文本(数千个)给出了这个错误。有问题的角色每次都是相同的: 0xe3 0x2e 0x2e

下班后,我正在请求你的帮助......

1 个答案:

答案 0 :(得分:3)

根据UTF-8规则,3个字节的有效序列必须如下:

  

1110xxxx 10xxxxxx 10xxxxxx

其中10是固定位,x表示可能具有10值的位。

你的序列0xe3 0x2e 0x2e是二进制的:

  

11100011 0 0101110 0 0101110

根据上面的模式,我输入粗体的第一个0应该是1,以使序列有效。根据UTF-8,粗体的第二个0也是另一个错误的数字。

所以它无效

此外,php的mb_check_encoding()会将其报告为无效,因此您的php检查可能是错误的。试试这个:

<?php
$bytes = pack("H*", "E32E2E");
$res = mb_check_encoding($bytes, "UTF-8");
if ($res)
  echo "Valid";
else
  echo "Invalid";
?>