处理PHP/MySQL导入的奇怪编码

处理PHP/MySQL导入的奇怪编码,php,mysql,csv,encoding,Php,Mysql,Csv,Encoding,我们每天从一个客户端上传一个CSV文件,他们说该文件采用UTF16-LE编码。但是,当我在CSV文件的每一行上运行iconv('UTF16-LE','UTF8')时,在进入数据库时看起来是这样的: Z�A.�A.�0�7.�3.�七, 也就是说,每个角色之间都有这样的东西 我尝试了utf8_编码以及iconv和不同编码类型的各种组合,以消除这种情况。有没有人有过这样的经验,以及如何将未知或不受支持的编码转换为UTF8,或者至少转换为PHP和MySQL可读的内容?UTF16中有一半字符无法转换为U

我们每天从一个客户端上传一个CSV文件,他们说该文件采用UTF16-LE编码。但是,当我在CSV文件的每一行上运行
iconv('UTF16-LE','UTF8')
时,在进入数据库时看起来是这样的:

Z�A.�A.�0�7.�3.�七,

也就是说,每个角色之间都有这样的东西


我尝试了utf8_编码以及iconv和不同编码类型的各种组合,以消除这种情况。有没有人有过这样的经验,以及如何将未知或不受支持的编码转换为UTF8,或者至少转换为PHP和MySQL可读的内容?

UTF16中有一半字符无法转换为UTF8。UTF16接受8位的加法

UTF16已编码到每个字符串中,LE或BE。为了好玩,您可以尝试从UTF16转换为UTF8(无“-LE”)。这会告诉你,如果你的客户对你撒谎。但最有可能的情况是,这些数据并不适合


一种解决方案是将其作为字节数组(二进制(x))存储在数据库中,而不是作为文本。

即使一半的字符无法转换,这些字符中的任何一个实际用于字符串的可能性有多大?除了字符范围之外,什么都不知道-50%基本上如果我们的数据库是UTF8,那么我们不能以字符串格式存储UTF16编码的字符串(即,它只能以二进制格式工作)?这是我的理解。我最近在Lucidchart工作时遇到了一个类似的问题,结果发现他们在LE上撒了谎,我刚刚用UTF16运行了iconv,效果很好。谢谢你的帮助!您是通过命令行还是使用PHP运行iconv?字符串在插入数据库之前是什么样子的?