[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