我需要显示存储在Postgresql数据库中并用SQL ASCII编码的数据(我无法更改数据库编码)。应用程序是用PHP编写的(使用Silex框架和Doctrine DBAL),最后通常应用程序中使用的字符集是UTF8。
有什么方法可以自动将数据从ASCII转换成UTF8编码并正确显示数据吗?
谢谢!
编辑:postgresql数据库中的数据以ISO-8859-2编码存储。
最佳答案
UTF8被故意设计为与真正的7位ASCII兼容,因此数据库中这128个字符中的任何字符都已经是有效的UTF8,因此可以按原样使用。
但是,如the Postgres manual page on encodings中所述,SQL_ASCII
字符集实际上并不拒绝ASCII范围之外的字符:
当服务器字符集为SQL_ASCII时,服务器根据ASCII标准解释字节值0-127,而字节值128-255被视为非意外字符。
...
因此,此设置与其说是使用特定编码的声明,不如说是对编码的无知声明。
因此,如果数据中有任何非ASCII字符,则需要知道它们存储在什么实际字符集(例如ISO 8859-15或Windows CP1252)中,并使用类似于iconv()
或mb_convert_encoding()
的内容将它们转换为UTF8。