gpt4 book ai didi

objective-c - sqlite和objective-c中的编码问题

转载 作者:行者123 更新时间:2023-12-03 18:06:31 25 4
gpt4 key购买 nike

我有一个内容如下的文件:

INSERT INTO table VALUES (NULL,'° F','Degrees Fahrenheit');
INSERT INTO table VALUES (NULL,'° C','Degrees Celsius');

现在,为了解析这个,我有这样的东西:

NSString *sql = [NSString stringWithContentsOfFile:filename];

将此字符串打印到控制台看起来是正确的。然后,我想从中创建一个实际的插入语句:

const char *sqlString = [query UTF8String];
const char *endOfString;
if (sqlite3_prepare_v2(db, sqlString + nextStatementStart, -1, &stmt, &endOfString) != SQLITE_OK) {
return NO;
}

此时,检查查询仍然返回正确的结果。也就是说,sqlite_sql(stmt) 返回 INSERT INTO table VALUES (NULL,'° F','Degrees Fahrenheit');

然后我用 sqlite3_step(stmt);

运行它

此时,查看数据库会发现:

1|←∞ F|华氏度

我没有在任何地方使用任何 _16 函数(例如 sqlite_open16)。

编码问题出在哪里?我该如何解决这个问题?

最佳答案

stringWithContentsOfFile: 从 OSX 10.4 开始已弃用(不确定 iPhone 是否如此),但您想使用 stringWithContentsOfFile:encoding:error 指定此处的编码

文件包含:

CREATE TABLE myvalues (foo TEXT, bar TEXT, baz TEXT);
INSERT INTO myvalues VALUES (NULL,'° F','Degrees Fahrenheit');

test.m 包含(未提供错误处理):

int main(int argc, char** argv)
{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];

NSString* s = [NSString stringWithContentsOfFile:@"file"
encoding:NSUTF8StringEncoding
error:nil];
NSLog(@"s: %@", s);

sqlite3* handle;
sqlite3_open("file.db", &handle);
sqlite3_exec(handle, [s UTF8String], NULL, NULL, NULL);
sqlite3_close(handle);

[pool release];
}

然后转储:

% sqlite3 file.db
SQLite version 3.6.12
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .dump
BEGIN TRANSACTION;
CREATE TABLE myvalues (foo TEXT, bar TEXT, baz TEXT);
INSERT INTO "myvalues" VALUES(NULL,'° F','Degrees Fahrenheit');
COMMIT;

关于objective-c - sqlite和objective-c中的编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1668774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com