[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re[4]: Backspace 2bytes character
- To: bep@argv.org
- Subject: Re[4]: Backspace 2bytes character
- From: Takayuki Watanabe <takayuki@la.shonan-it.ac.jp>
- Date: Wed, 02 Aug 2000 23:05:52 +0900
- Delivered-To: mailing list bep@argv.org
- Mailing-List: contact bep-help@argv.org; run by ezmlm
渡辺@湘南工科大です。
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++依存のコードで構わないので、ここをマルチバイト対応にす
る方法を教えてください。