[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re[4]: Backspace 2bytes character



渡辺@湘南工科大です。

On Wed, 02 Aug 2000 17:10:38 +0900, Takayuki Watanabe wrote:
> 原因の一つは、スピーチサーバーの say_letter() でバイリンガル化をサボって
> いることにあります。
> 
> On Wed, 02 Aug 2000 16:14:04 +0900, Takayuki Watanabe wrote:
> > > > 2バイト文字をバックスペース消すと、Emacspeakが不思議なことをのたまいま
> > > > す。

この問題に関して皆様のお知恵を貸してください。

スピーチサーバーの MainFrm.cpp の CMainFrame::OnSayIt() の中でEmacspeak
から受け取ったコマンドの解析をしています:

void VoiceManager::say_letter(char c);

while(*p) {
...
    else if (*p == 'l' ) {     // say_letter command
      char c;
      if (sscanf(p, "l {%c}", &c) == 1) {  // analyze command string
         m_pVM->say_letter(c); // execute command
      }
...


が、コマンド文字列が "l {a}" のような一文字読み上げの say_letter コマ
ンドだった場合に、読み上げるべき文字 'c' を取得する部分です。ここで
"%c"として文字を取得しているのでマルチバイト文字が化けるのです。
say_letter() も書き換えねばなりませんが、ここはどう書き換えたら問題を
回避できるのでしょうか?

一度読み込んでから、マルチバイトかどうかによって場合分けをして処理す
るのかな。VC++依存のコードで構わないので、ここをマルチバイト対応にす
る方法を教えてください。