【问题标题】:npgsql: reading strings doesn't seem to consider code page?npgsql:读取字符串似乎不考虑代码页?
【发布时间】:2015-07-24 21:03:06
【问题描述】:

首先,我在两个 SQL 方面都是一个完整的 n00b,并且对不同的代码页也没有多少经验,所以答案可能很简单,这也可以解释为什么这里似乎以前没有人问过这个问题。

我有一个 PostgreSQL 数据库(v 8.4.22,协议 v3)和一个带有 npgsql 2.0 的 Unity3D 应用程序。现在,我连接到我的数据库,使用 ExecuteReader() 执行 NpgsqlCommand,得到一个 NpgsqlDataReader。现在,如果我用 GetString( int ) 从中读取,我得到一个编码错误的字符串,我的特殊字符完全搞砸了,例如我得到一个'ö'而不是'ö'。我已经在调试器中看到了这个,所以输出没有问题,返回的字符串已经搞砸了,所以我现在不知道我的选择是什么。数据库使用 UTF-8。该列的数据类型是“文本”。

顺便说一句,我在没有指定代码页的情况下进行连接,因为我读到自某些 PSQL 版本以来,连接字符串中已过时。反正我试过了,没有任何效果。

有什么想法吗?谢谢。

【问题讨论】:

    标签: c# unity3d npgsql codepages


    【解决方案1】:

    我认为“代码页”在这里不相关,问题似乎是:

    • PostgreSQL 数据库包含 unicode,编码为 UTF-8,而...
    • npgsql 将数据解释为 ascii。

    根据this stackoverflow question,解决方法是在连接字符串中显式指定Encoding=UNICODE

    【讨论】:

    • 代码页基本上是编码不同字符集的 pre-unicode 方式。如果您可以让所有组件都使用 unicode,那么您就不必担心它们。
    • 哇。我知道有一个简单的解决方案。我在 npgsql 文档和 PostgreSQL 文档中都找不到这个。只是来自不同来源的不同、不一致的参数名称,例如“CharSet”、“character_set”、“CharacterSet”等,它们始终设置为“utf-8”而不是“Encoding=UNICODE”。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 2023-04-06
    • 1970-01-01
    • 2016-06-25
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    相关资源
    最近更新 更多