INASOFT 管理人のひとこと


フリーソフトダウンロードサイト「INASOFT」の管理人 矢吹拓也 が日々の「ひとこと」を語るページです。
2021年1月1日より、旧ブログ(blog.inasoft.org)からお引越ししました。
・INASOFT Webサイト: https://www.inasoft.org/
・管理人のふたこと(長文記事/寄稿文): https://www.inasoft.org/talk/
本業の方のお仕事が再び忙しくなりつつあるので、断続的にしばらく更新が止まることがあります。

目次 | ←前へ / 2014-08-17 15:41 / 次へ→ / 最新へ⇒

■各種ソフト正式版の更新のお知らせ

2014/ 8/17 15:41:49


RSSRSS配信中

https://www.inasoft.org/








今日までβ版更新をしていた、下記の各ソフトについて、正式版への更新を行いました。

  • キーボードシミュレータ.NET ver.1.28
  • コピペテキスト修飾除去 ver.1.29.05
  • NumLockLock ver.1.28.09
  • 改行コード変換 ver.1.20.02
  • マウスのお供 ver.1.56.02
  • ListView to CSV ver.2.22.08
  • マウスふるふる ver.1.10.02
  • Come here windows ver.0.15
  • いじくるつくーる ver.7.73.25
夏休み中にβ版の開発をしていましたので、夏休み終了と共に正式版の公開ということで。

修正し切れていない不具合等もあるかもしれませんが、次の連続休暇の時にでも修正をしたいと思います。

各ソフトのダウンロードページへのリンクは、INASOFTのトップページよりご利用ください。


-*-*-*-*-*-*-*-*-

ところで、改行コード変換で、UTF-32を絡めた変換が、どうも、うまく動かないらしい。

以前は動いていたと思ったんですが…、いつの間にやら動かなくなっていて、ただプログラムはどうみても正しいので、簡単な実験プログラムを作ってみることにしました。

まずは、うまく動く場合。Unicode(UTF-16)の「あいうえお」から、Shift-JIS(CP=932)へ変換した結果を出力します。



#include <windows.h>

#include <stdio.h>

int main(void)
{
    char s[120];
    int  is = sizeof(s), ls;

    if (0 == (ls = WideCharToMultiByte(932, 0, L"あいうえお", 5, s, is, NULL, NULL))) {
        printf("err=%d\n", GetLastError());
    }
    else {
        printf("length = %d\n", ls);
        for(int i=0 ; i<ls ; ++i) {
            printf("%02X ", (unsigned char)s[i]);
        }
    }
    return 0;
}



結果は、

length = 10
82 A0 82 A2 82 A4 82 A6 82 A8

と表示されます。これは想定通りです。

次に、Unicode(UTF-16)の「あいうえお」から、UTF-32へ変換した結果を得たいプログラム。



#include <windows.h>

#include <stdio.h>

int main(void)
{
    char s[120];
    int  is = sizeof(s), ls;

    if (0 == (ls = WideCharToMultiByte(12000, 0, L"あいうえお", 5, s, is, NULL, NULL))) {
        printf("err=%d\n", GetLastError());
    }
    else {
        printf("length = %d\n", ls);
        for(int i=0 ; i<ls ; ++i) {
            printf("%02X ", (unsigned char)s[i]);
        }
    }
    return 0;
}



赤い字で書かれた部分が、先ほどのプログラムとの違い。

コードページ12000は、UTF-32のリトルエンディアン版となります。

このプログラムを実行すると、結果は、以下のようになります。

err=87

この87番のエラーは、パラメータの指定間違いという意味。

さっきと変えたパラメータは、コードページの部分(932→12000)しかありません。バッファサイズは120バイトと潤沢であり、足りないことはありません。

その他に、コードページを12000にした場合に変更しなければならないパラメータがあるとは、MSDNの記述からは読み取れないので、おそらくプログラムとしてはこれで正しいはず。でも、動いてくれない…。

ちなみに、コードページを12001(ビッグエンディアンのUTF-32)にした場合も同様。

もしかすると、WideCharToMultiByte() APIは、コードページ1200012001には対応していないのかな?

(同様の現象は、ConvertStringFromUnicodeEx() でも発生しているみたい。もしかすると、Windowsとしては対応しない文字コードなのかな?)

【追記】その後、色々ググっていたら、このコードページはManaged Application(要は .NET Framework上のみ)でしか使えない、みたいな記述のあるサイトを見つけたので、それが原因でしょうかね。前にうまく動いたと思ったのも、「複数行置換」(.NET Framework用のプログラム)を見ただけだったのかもしれない。



目次 | ←前へ / 2014-08-17 15:41 / 次へ→ / 最新へ⇒


目次の表示:


ブログではないので、コメント機能とトラックバック機能は提供していません。ご質問・ご意見等はメールフィードバックまたはTwitter等からお願いします。いただいたご質問・ご意見などは、この「管理人のひとこと」の記事に追加、あるいは新規の記事にする形で一部または全文をそのまま、あるいは加工させていただいた上で、ご紹介させていただく場合があります。
当サイトでは掲載内容による不具合等に関する責任を持ちません。また、内容の正確性についての保証もありませんので、情報をご利用の際は、利用者の自己責任で確認をお願いします。本ページは公開から1年半後の任意のタイミングで削除される予定です。




2554544 (+0244)[+0573]

Copyright© 2010-2021 INASOFT