QStringはUTF-16
この記事 でも書きましたが、Qtでは文字コードをUTF-16で扱っています。
ファイル入出力などで、Shift-JISやEUCを使用する場合の変換方法について。
UTF-16から変換
UTF-16 → 現在のロケール(WindowsであればShift-JIS)
std::string Test::utf16_to_locale(const QString &src) { return src.toLocal8Bit().toStdString(); }
UTF-16 → UTF-8
std::string Test::utf16_to_utf8(const QString &src) { return src.toUtf8().toStdString(); }
UTF-16 → Shift-JIS
std::string Test::utf16_to_sjis(const QString &src) { QTextCodec *codec = QTextCodec::codecForName("Shift-JIS"); QByteArray encoded = codec->fromUnicode(src); return encoded.toStdString(); }
UTF-16 → EUC-JP
std::string Test::utf16_to_euc(const QString &src) { QTextCodec *codec = QTextCodec::codecForName("EUC-JP"); QByteArray encoded = codec->fromUnicode(src); return encoded.toStdString(); }
UTF-16に変換
現在のロケール → UTF-16
UTF-8 → UTF-16
この記事 を参照。
Shift-JIS → UTF-16
QString Test::sjis_to_utf16(const std::string &src) { QTextCodec *codec = QTextCodec::codecForName("Shift-JIS"); return codec->toUnicode(src.c_str()); }
EUC-JP → UTF-16
QString Test::euc_to_utf16(const std::string &src) { QTextCodec *codec = QTextCodec::codecForName("EUC-JP"); return codec->toUnicode(src.c_str()); }