我目前正在开发一个具有全文搜索功能的 IOS 应用程序。搜索是通过在 sqlite 数据库上执行 select 语句来执行的,但问题是数据库中的许多值都包含斯堪的纳维亚字母(Æ、Ö、Á 等),并且我在转换语句时遇到了麻烦而没有获得十六进制值对于字母。
这是我目前正在做的事情:
const char *sql = [[NSString stringWithFormat:
@"SELECT %@\
FROM Customer c\
JOIN Customer_Metadata cm ON c.CustomerId = cm.CustomerId\
WHERE cm.Name LIKE '%%%@%%'\
ORDER BY cm.Name", kCustomerSelect, searchString] UTF8String];
现在 kCustomerSelect 是一个包含我要选择的列的常量,而 searchString 包含用户输入。
这就像普通拉丁字母的魅力一样,但如果我将 Ö 作为 searchString 传递,我会得到 st\xc3\xb6。我知道简单地注销 UTF8 编码的字符串不会给出正确的字符串表示,但问题是我的 select 语句没有给我任何结果。
我在执行查询之前和 SQLite 文档中调用 sqlite3_open() *“如果调用 sqlite3_open() 或 sqlite3_open_v2(),则数据库的默认编码将是 UTF-8,如果 sqlite3_open16,则以本机字节顺序使用 UTF-16 () 用来。”*。
我尝试通过替换和尝试不同的编码来使用UTF8String
不同cStringUsingEncoding:
的编码。他们都没有工作(不是我期待他们,但至少想尝试)。
任何和所有帮助或提示,将不胜感激。
编辑 我现在尝试使用 SQLite 数据库浏览器在数据库上运行相同的选择语句,但没有得到任何结果。这让我相信这可能与我使用 FTS3 创建我的 Customer_Metadata 表有关。
德累斯顿先生