【问题标题】:SQLite MYSQL character encodingSQLite MYSQL 字符编码
【发布时间】:2011-03-10 09:58:49
【问题描述】:

我有一个奇怪的情况,下面的代码可以工作,但是 XCode 警告它已被弃用......

NSString *col1 = [NSString stringWithCString:(char *)sqlite3_column_text(compiledStatement, 0)];

但是,如果我设置了编码,那么这是不推荐使用的方法,字符串会出错!我已经尝试了所有的编码,但没有一个工作!

NSString *col1 = [NSString stringWithCString:(char *)sqlite3_column_text(compiledStatement, 0) encoding:NSASCIIStringEncoding];

【问题讨论】:

    标签: iphone sqlite nsstring


    【解决方案1】:

    我原以为讽刺的建议会奏效,但这是我使用的 Cocoa 版本:

    如果你正在处理 utf16

    int len = sqlite3_column_bytes16(compiledStatement, col) / 2;
    unichar *chars = (unichar*)sqlite3_column_text16(compiledStatement, col);
    NSString *str = [NSString stringWithCharacters:chars length:len];
    

    如果你使用的是 utf8

    int len = sqlite3_column_bytes(compiledStatement, col);
    char *chars = (char*)sqlite3_column_text(compiledStatement, col);
    NSString *str = [NSString stringWithUTF8String:chars length:len];
    

    【讨论】:

      【解决方案2】:

      试试 NSString *col1 = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)];

      如果您的数据库使用 utf8 编码

      【讨论】:

      • 不怕,这会在 NSLogging 时返回任何带有特殊字符的内容(空)。如何检查数据库编码?
      • 用于管理 SQLite 表的简单工具是一个名为 SQLite Manager 的 javascript Firefox 插件,您可以从应用程序包中打开您的数据库。要检查您的数据库编码,请参阅 DBSettings 选项卡。
      • 使用printf("%s", (char *)sqlite3_column_text(compiledStatement, 0));查看从数据库返回的char值
      • printf 在前几个条目后停止
      【解决方案3】:

      首先检查数据库中的条目是否包含相同的罗马词。

      NSString *strtemp = [NSString stringWithCString:(char *)sqlite3_column_text(compiledStatement, 0)]; strtemp=[strtemp stringByAddingPercentEscapesUsingEncoding:NSMacOSRomanStringEncoding];

      NSMacOSRomanStringEncoding 肯定会工作。我也面临同样的问题。

      【讨论】:

        【解决方案4】:

        试试这个,它适用于我的 UTF8 编码

        char *chars = (char*)sqlite3_column_text(compiledStatement, col);
        NSString *str = [NSString stringWithCString:chars encoding:NSUTF8StringEncoding];
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-11
          • 1970-01-01
          • 2011-08-27
          • 2015-02-28
          • 2013-04-26
          • 1970-01-01
          相关资源
          最近更新 更多