【问题标题】:Check the encoding of text in SQlite检查 SQlite 中文本的编码
【发布时间】:2010-12-26 02:38:14
【问题描述】:

我在处理 SQlite 中的非欧洲文本时做噩梦。我认为问题在于 SQlite 没有以 UTF8 编码文本。所以我想检查编码是什么,并希望将其更改为 utf8。我用 UTF8 编码了一个 CSV,然后简单地将其导入到 SQlite,但非罗马文本是乱码。

我想知道: 1)如何检查编码。 2)如果不是utf8,如何更改编码。我一直在阅读有关 Pragma 编码的信息,但我不确定如何使用它。

我使用 OpenOffice 3 创建了一个半英文半日文文本的电子表格。接下来,我使用 utf8 将文件保存为 CSV。这部分似乎还可以。我也尝试使用 Google Docs 来做,效果很好。接下来我打开 SQlite 浏览器并进行 CSV 导入。英文文本显示完美,但日文文本是乱码。我认为 sqlite 使用的是不同的编码(也许是 utf16?)。

【问题讨论】:

  • 请提供有关您当前导入过程的更多信息。您使用什么语言?另外,你是怎么显示乱码的?
  • 我更新了我的问题。 SQlite 浏览器中显示的文本不可读。

标签: sqlite csv utf-8


【解决方案1】:

您可以使用此编译指示测试编码:

PRAGMA encoding; 

无法更改现有数据库的编码。要创建具有特定编码的新数据库,请打开与空白文件的 SQLite 连接,运行以下 pragma:

PRAGMA encoding = "UTF-8"; 

然后创建您的数据库

如果您有一个数据库并且需要不同的编码,那么您需要使用新编码创建一个新数据库,然后重新创建架构并导入所有数据。

但是,如果您遇到乱码文本的问题,则几乎总是使用其中一种工具的问题,而不是 SQLite 本身的问题。即使 SQLite 使用不同的编码,唯一的最终结果是它会导致一些额外的计算,因为 SQLite 会不断地从存储的编码转换为 API 请求的编码。如果您使用的不是 C 级 API,那么您永远不应该关心编码——您使用的工具使用的 API 将决定应该使用哪种编码。

许多 SQLite 工具都显示了将文本处理到 SQLite 之外的问题,包括命令行 shell。尝试从命令行运行 SQLite,并告诉它自己导入文件,而不是通过 SQLite 浏览器。

【讨论】:

  • 感谢您的帮助!我设法解决了。从数据库中读取后,我只是将乱码文本编码为 Java 中的 utf8。它似乎工作正常。无法弄清楚它有什么问题,但它或多或少是固定的。我只是无法在数据库中读取它。
  • 那么,先创建一个空文件,然后用sqlite3_open()打开,然后执行PRAGMA encoding="UTF-8"?打开 SQLite 连接与创建数据库有什么区别?我不确定我是否理解打开 SQLite 连接和创建数据库之间的区别。谢谢!
  • @titusmagnus,您通过文件名打开到数据库的连接。如果该文件不存在,sqlite 会为您创建它。
  • PRAGMA encoding;sqlite> 提示符下输入时不输出任何信息(对我而言)。我期待它告诉我当前正在使用的编码,但没有。
  • @LonnieBest 很抱歉听到这个消息。我检查了文档,自发布以来似乎没有任何变化。它应该有输出。 sqlite.org/pragma.html#pragma_encoding
【解决方案2】:

我也遇到过类似的问题。我使用 SQLiteStudio 访问数据库并导出数据。 SQLiteStudio 不能正确处理 UTF8 特殊字符,但是,SQLite 数据库本身包含正确的 UTF8 字符。我最终在 C# 中编写了一个代码 sn-p 以连接到数据库、运行我的查询并导出数据。这种方法效果很好。

【讨论】:

    猜你喜欢
    • 2017-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-28
    • 1970-01-01
    • 2020-08-17
    • 2015-07-13
    相关资源
    最近更新 更多