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() は WSTRING ではなく STRING を返します)、(コンソール上で) 次のようになります。
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 に変換されるようにするにはどうすればよいですか?
これは、クライアントが独自の Excel ファイルをアップロードできる Web サービスのバックエンドとして実行されるため、「Libre Office でファイルのエンコーディングを変更する」は機能しません。