[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[debian-devel:16490] Re: aptitude --show-deps の文字化け
こんにちは、
> src/cmdline/cmdline_prompt.cc の reason_string_list 内の
>
> s+=const_cast<pkgCache::DepIterator &>(why->dep).DepType()[0];
> s+=": ";
> s+=why->pkg.Name();
>
> というコードが「D: ruby1.8」のような部分を作っているようで、引用 1 行
> 目でマルチバイト (たぶん UTF-8) 文字列の一文字目をきちんと取得できてい
> ないのが原因かと思います。
まず、 DepType() は libapt の中で、依存関係を返してくれる関数で、国際化した文字列を返してきます。
この時点では、 locale が設定されているので、 locale 関連の関数が全部利用できるはずです。
こんなコードを考えてみました。
/*BINFMTC:
*/
#include <stdio.h>
#include <locale.h>
#include <wchar.h>
int main()
{
wchar_t buf1[10];
char buf2[10];
mbstate_t ps1, ps2;
size_t ret;
setlocale(LC_ALL,"");
ret=mbrtowc(buf1, "こんなものが", 10, &ps1);
if (ret == -2)
{
/* error */
}
ret=wcrtomb(buf2,buf1[0],&ps2);
if (ret > 0 )
buf2[ret]=0;
printf ("%s\n", buf2);
return 0;
}
上川
--
dancer@{debian.org,netfort.gr.jp} Debian Project