我正在编写一些从 XLS 文件中获取行并将它们插入数据库的软件。
在 OpenOffice 中,单元格如下所示:
Brunner Straße, Parzelle
我正在使用 CodeProject 中的 ExcelFormat 库。
int type = cell->Type();
cout << "Cell contains " << type << endl;
const char* cellCharPtr = cell->GetString();
if (cellCharPtr != 0) {
value.assign(cellCharPtr);
cout << "normal string -> " << value << endl;
}
使用库获取的字符串作为 char* 返回(因此 cell->Type() 返回 STRING,而不是 WSTRING),现在看起来像这样(在控制台上):
normal string -> Brunner Stra�e, Parzelle
hex string -> 42 72 75 6e 6e 65 72 20 53 74 72 61 ffffffdf 65 2c 20 50 61 72 7a 65 6c 6c 65
我使用 mysql cpp 连接器将其插入数据库,如下所示:
prep_stmt = con -> prepareStatement ("INSERT INTO "
+ tablename
+ "(crdate, jobid, imprownum, impid, impname, imppostcode, impcity, impstreet, imprest, imperror, imperrorstate)"
+ " VALUES(?,?,?,?,?,?,?,?,?,?,?)");
<...snip...>
prep_stmt->setString(8,vals["street"]);
<...snip...>
prep_stmt->execute();
将其插入具有 utf8_general_ci 排序规则的数据库后,它看起来像这样:
Brunner Stra
这很烦人。
当从 xls 文件中检索字符串时,如何确保文件所在的任何语言环境都转换为 utf-8?
这将作为 Web 服务的后端运行,客户可以在其中上传自己的 excel 文件,因此恐怕“更改 Libre Office 中文件的编码”无法正常工作。