【问题标题】:Difficulty dealing with encoding in SQLite在 SQLite 中处理编码的困难
【发布时间】:2013-08-15 05:34:54
【问题描述】:

我正在尝试从 SQLite 文件中获取信息,当我运行查询时,信息以 ASCII 编码返回。我正在使用下面的代码将返回的信息放入一个字符串中。

[NSString stringWithCString:(char *)sqlite3_column_text(compiledStatement, 2) encoding:NSASCIIStringEncoding];

当我尝试使用 UTF8 编码将返回的信息放入字符串时,它不起作用。以下代码用于当前商店的应用程序中。

[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];

字符串为空。如何转换 SQLite 文件以使其使用 UTF8 编码?商店的当前版本的应用程序使用上面的后一个代码,所以我需要弄清楚如何转换文件,而不是更改应用程序中的代码。

【问题讨论】:

  • 我认为如果您将标题更改为“更改 SQLite 编码?”“SQLite 编码问题”或“SQLite 中的编码困难”之类的内容,您会获得更多的点击率,希望能成功!
  • 在 sqlite 数据库中创建数据时使用了什么编码?如果它是使用 ASCII 编码编写的,那么您所做的是正确的。
  • @rmaddy App Store 上的当前应用程序尝试使用 UTF8 编码读取数据库。您知道如何转换数据库以使其与 UTF8 兼容吗?
  • @rmaddy 查看我的编辑。以下不起作用:[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)]; 返回一个空字符串。

标签: ios objective-c database sqlite


【解决方案1】:

您可以将const void *sqlite3_column_text16(sqlite3_stmt*, int iCol);stringWithCharacters:length: (UTF16) 一起使用

const unichar *text = sqlite3_column_text16(_sqlite_stmt, columnIndex);
if (text) {
   NSUInteger length = sqlite3_column_bytes16(_sqlite_stmt, columnIndex)/sizeof(unichar);
   article = [NSString stringWithCharacters:text length:length];
}

【讨论】:

  • App Store 上的应用程序版本试图读取 UTF8 编码的数据库文件,所以我需要弄清楚如何将数据库文件转换为使用 UTF8。你知道怎么做吗?
  • 查看我的编辑。以下不起作用:[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)]; 这将返回一个空字符串。
  • @JackHumphries per sqlite.org/c3ref/column_blob.html "[如果]他的初始内容是 UTF-8 文本,并且调用了 sqlite3_column_bytes16() 或 sqlite3_column_text16() [那么]他的内容必须转换为 UTF-16 。” — sqlite3_column_text16 并不暗示任何关于存储的内容。虽然sqlite3_column_text 也是如此,但奇怪的是你已经在做的事情不起作用。
【解决方案2】:

试试这个:

char *title = (char *)sqlite3_column_text(compiledStatement, 2);
NSString *str = [NSString stringWithUTF8String:title];

对我来说工作得很好!

【讨论】:

  • 感谢您的回答。我想知道如何更改数据库文件,因为该应用程序已经在 App Store 上。如果不发布更新,我无法更改代码。
猜你喜欢
  • 2016-12-24
  • 2018-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-26
  • 1970-01-01
相关资源
最近更新 更多