• 締切済み

postgresqlのC++での文字エンコード

postgresql 9.1を文字コードUTF8でインストールして windows 7 professional sp1 x64で Visual Studio 2010 C++ MFCプロジェクトでアクセスするプログラムを作成しているのですが、 libpqとodbcのPostgreSQL ODBC Driver(UNICODE) x86、いずれでも、下記のように一部がCStringA(Shift_JIS?)で操作するプログラムになっています。 あまり気にすることではないのかもしれないのですが、 UTF8をSHIFT_JISで扱おうとすると足りない特殊文字などが出てこないかと懸念しています。 libpqとodbcのPostgreSQL ODBC Driver(UNICODE) x86、または別のものでもよいので MFC C++ で UTF8で操作することはできないのでしょうか。 またはそのような懸念は無用なのでしょうか。 どなたかご教授よろしくお願い致します。 ------------------------------------------ libpq result = PQexec (connection,CStringA(sql)); if (result == NULL) { st.Format( "%s\n", PQerrorMessage (connection)); OutputDebugString(CString(st)); } ------------------------------------------ odbc CStringA param = "ああいう"; SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, param.GetLength() / 2, 0, (SQLTCHAR*)((LPCSTR)param), 0, NULL);

みんなの回答

  • Dodonpa22
  • ベストアンサー率100% (4/4)
回答No.1

Postgresはサーバの文字セット(UTF-8)とクライアント側の文字セット(SHIFT-JIS) を自動で変換する機能を提供しています。 libpqを使っているのでしたらPQClientEncodingを使って変換を明示的に 指定できます。 参照 22.2.3. サーバ・クライアント間の自動文字セット変換 http://www.postgresql.jp/document/9.1/html/multibyte.html#AEN32071

関連するQ&A