与UTF8编码字符在WIN1252没有等价(Character with encoding UTF8

2019-07-27 23:07发布

我得到以下异常:

Caused by: org.postgresql.util.PSQLException: ERROR: character 0xefbfbd of encoding "UTF8" has no equivalent in "WIN1252"

有没有根除这样的字符,或者通过SQL或以编程的方式?
(SQL溶液应优选)。

我想连接到数据库使用WIN1252的,但它会给同样的问题。

Answer 1:

什么意思时,你得到这个消息,你怎么办? 你导入文件Postgres的? 正如devstuff说,这是一个BOM字符。 这是一个字符Windows会将作为第一个到一个文本文件,当它被保存在UTF8编码 - 它是无形的,0宽字符,所以在文本编辑器打开时,你就看不到它。

尝试在例如记事本打开该文件,另存为它的ANSI编码,并添加(或替换类似) set client_encoding to 'WIN1252'在你的文件中的行。



Answer 2:

我有一个类似的问题,我通过编码设置为与UTF8解决\encoding UTF8在尝试之前在客户机INSERT INTO foo (SELECT * from bar WHERE x=y); 。 使用WIN1252编码我的客户,但该数据库是UTF8,因此错误。

更多信息可在下面的PostgreSQL的维基字符集支持 (devel的文档)。



Answer 3:

不要eridicate的人物,他们是真正的和用于很好的理由。 相反,eridicate Win1252。



Answer 4:

我有一个非常类似的问题。 我不得不从SQL Server链接服务器PostgreSQL数据库。 一些数据我在我是从使用OPENQUERY语句选择表中有一些字符没有在Win1252等价物。 问题是,我曾用于连接系统DSN条目(要在ODBC数据源管理器下找到)配置为使用PostgreSQL ANSI(64位),而不是PostgreSQL的统一(64)。 创建与Unicode支持新的数据源,并创建一个新的修改链接服务器和refernecing在OPENQUERY新的链接服务器解决了这个问题对我来说。 快乐的时光。



Answer 5:

这看起来像字节序列0xBD,为0xBF,0xEF作为little-endian的整数。 这是Unicode字节顺序标记(BOM)字符为0xFEFF的UTF8编码形式。

我不知道Postgre的正常行为是什么,但BOM通常仅用于在输入流的开始编码的检测,通常不返回结果的一部分。

在任何情况下,你的异常是由于没有在Win1252代码页映射该代码点。 这将与大多数其他非拉丁字符过多,如在亚洲脚本中使用发生。

你可以改变数据库编码进行UTF8,而不是1252? 这将使你的列包含几乎所有的字符。



Answer 6:

我能够通过使用Postgres的子功能和选择,而不是绕过它:

select substring(comments from 1 for 200) from billing

该特殊字符启动每个字段的评论是在最终解决它有很大的帮助。



Answer 7:

这个问题出现了我们身边19/11/2016与我们旧的Access 97的应用程序访问一个PostgreSQL 9.1 DB。

这是通过改变驾驶者UNICODE而不是ANSI(见plang评论)解决。



Answer 8:

下面是我工作:1启用sp_configure的即席查询。 2添加ODBC DSN为您的链接PostgreSQL服务器。 3,确保你同时拥有ANSI和Unicode(x64)的驱动程序(尝试用两种)。 4运行这样的查询如下 - 改变UID,服务器IP,数据库名和密码。 5只保留查询在PostgreSQL中格式的最后一行。

EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO

SELECT * FROM OPENROWSET('MSDASQL', 
'Driver=PostgreSQL Unicode(x64); 
uid=loginid;
Server=1.2.3.41;
port=5432;
database=dbname;
pwd=password',

'select * FROM table_name limit 10;')


文章来源: Character with encoding UTF8 has no equivalent in WIN1252