Shift_JIS非対応文字の保存問題 – プログラミング – Home

Shift_JIS非対応文字の保存問題
 
通知
すべてクリア

[解決済] Shift_JIS非対応文字の保存問題


確変
 確変
(@確変)
ゲスト
結合: 13年前
投稿: 35
Topic starter  

Windows 7, Visual Studio 2010, VC++, ダイアログベース, ”Unicode文字セットを使
用する”です。

テキストデータを CSVファイルに保存するアプリを作っています。
Shift_JIS と、Unicode と、選んで保存できるようにしています。
コードの一部を下に示します。

CString sSave = _T(○○○○); // ○○○○は CSV形式のテキスト
if (m_bUnicodeFile == FALSE) // Shift_JISファイルの場合
{
CStdioFile sf;
_wsetlocale(LC_ALL, _T(jpn));
sf.Open(m_sFileName, CFile::modeCreate | CFile::modeWrite);
sf.WriteString(sSave);
sf.Close();
_wsetlocale(LC_ALL, _T("));
}
else // Unicodeファイルの場合
{
CFile f;
f.Open(m_sFileName, CFile::modeCreate | CFile::modeWrite);
f.Write(sSave, sSave.GetLength() * sizeof(TCHAR));
f.Close();
}

通常はこれで問題なく動作しています。
ところが、○○○○の中に Shift_JIS非対応の文字が入っていると、Shift_JISファイル
保存の場合、その文字以降が保存されません。末尾の改行コードも消えるので、CSVファ
イルとして使えなくなります。
Shift_JIS非対応の文字の例:☎
これは電話の絵文字です。MS-IMEで「でんわ」で漢字変換すると出ます。

エディットボックスに Shift_JIS非対応文字が入力された時点で警告を発するようにし
たいのですが、Shift_JIS非対応文字を検知するにはどうしたらいいでしょうか?

よろしくご教授お願いします。


引用未解決
トピックタグ
tetrapod
 tetrapod
(@tetrapod)
ゲスト
結合: 21年前
投稿: 830
 

VS2010 では CStringA (MBCS) と CStringW (UNICODE) を同時に使うことができる。
CStringW → CStringA → CStringW と2回変換してみるといい。
・元に戻る= CP932 で表現できる文字でのみ構成されている
・元に戻らない= CP932 で表現できない文字を含む


返信引用
確変
 確変
(@確変)
ゲスト
結合: 13年前
投稿: 35
Topic starter  

terapod 様、いつも有り難うございます。
簡単な方法を教えて戴き助かりました。
エディットボックスが沢山あって、入力のつど警告するのは厄介なので、保存時にメッ
セージを出すことにしました。

if (m_bUnicodeFile == FALSE) // Shift_JISファイルの場合
{
CStringA strA = sSave;
CStringW strW = strA;
if (strW.Compare(sSave) != 0)
{
AfxMessageBox(_T(警告));
return;
}
・・・以下同じ

こんな具合で、動作確認できました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました