0

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 でファイルのエンコーディングを変更する」は機能しません。

4

1 に答える 1

1

入力は latin1 でエンコードされているようです。そのため、mysql の「接続文字セット」を に設定する必要がありますlatin1

MySQL への接続に使用している API についてよく知りません。他の API では、接続 URL に追加charset=latin1するか、API 関数を呼び出して接続エンコーディングを設定します。

または、MySQL にフィードする前に入力を再コーディングすることもできます。

于 2013-01-23T16:53:46.593 に答える