【发布时间】:2015-07-19 05:06:40
【问题描述】:
我正在开发一个带有 SQLite 数据库的 Windows Phone 8.1 应用程序来存储本地化字符串。为此,我使用 SQLite for Windows Phone 8.1 扩展,并且我正在使用 C# 进行编程。但是,当我将本地化字符串存储在数据库中时,“å”、“ö”等特殊字符在 SQLite 数据库中显示为“�”。
我已经尝试了以下方法:
1) 在将 C# 字符串存储到数据库之前将其转换为 UTF-8、UTF-16 或 Unicode,无需任何帮助。看来用 C# 编码字符串是没用的。
2) 使用 PRAGMA encoding="UTF-16" 设置 SQLite 数据库使用 UTF-16 编码;创建数据库时。编译指示已正确处理,但特殊字符仍为“�”。
我的假设是 SQLite for Windows Phone 8.1 扩展的 C++ 代码有问题。
在别处存储本地化字符串不是一种选择,那么我怎样才能获得 SQLite for Windows Phone 8.1 扩展来正确存储特殊字符?
C#代码:
public IEnumerable<IDictionary<string,object>> ExecuteQuery(string query)
{
lock (LockObject)
{
var sqCommand = new SQLiteCommand(_sqLiteConnection) { CommandText = query };
return sqCommand.ExecuteQueryEx();
}
}
执行的查询是:
INSERT INTO LocalizedStrings (Id, LocalizedKey_Id, Language_Id, StringValue) VALUES (13,13,1053,'Sökområde');
以及 SQLiteCommand.ExecuteQueryEx 代码:
public IEnumerable<IDictionary<string,object>> ExecuteQueryEx()
{
if (_conn.Trace)
{
Debug.WriteLine("Executing Query: " + this);
}
var result = new List<Dictionary<string,object>>();
var stmt = Prepare();
while (SQLite3.Step(stmt) == SQLite3.Result.Row)
{
var columnCount = SQLite3.ColumnCount(stmt);
var row = new Dictionary<string,object>();
for (var i = 0; i < columnCount; i++)
{
var columnName = Marshal.PtrToStringAnsi(SQLite3.ColumnName(stmt, i));
var columnType = SQLite3.ColumnType(stmt, i);
var value = ReadColEx(stmt, i, columnType);
row.Add(columnName, value);
}
result.Add(row);
}
Finalize(stmt);
return result;
}
【问题讨论】:
-
分享您的代码以获得更好的答案和指导。
标签: c# sqlite encoding windows-phone-8.1