LINUX.ORG.RU

g++ и wide characters: converting to execution character set: Invalid or incomplete multibyte or wide character


0

0

Почему компилятором gcc/g++-3.4 (libstdc++.so.6.0.8) выдается нижеследующая ошибка ?
Компилятор версии 3.3 (libstdc++.so.5.0.7) нормально обрабатывал wide characters.

test.cpp:
#include <wchar.h>

int main () {
  wchar_t a[] = L"Выход";
  return 0;
}

$ g++-3.4 test.cpp 
test.cpp:4:17: converting to execution character set: Invalid or incomplete multibyte or wide character
$ g++-3.3 test.cpp
$
★★★★★

Написан какой-то символ в узкой кодировке, и ты ждешь от компилятора, что он сам догадается, что это русская буква 'В'. Откуда бы? Нужно charset сообщить. В командной строке.

anonymous
()
Ответ на: комментарий от Sectoid

Компиляторы стандартные. Debian Etch testing от 27.11.2006
$ gcc-3.3 --version | head -1
gcc-3.3 (GCC) 3.3.6 (Debian 1:3.3.6-13)
$ gcc-3.4 --version | head -1
gcc-3.4 (GCC) 3.4.6 (Debian 3.4.6-4)

pacify ★★★★★
() автор топика
Ответ на: комментарий от anonymous

ok, man gcc-3.4 уже содержит следующее:

-fexec-charset=charset
  Set the execution character set, used for string and
  character constants.  The default is UTF-8.  charset
  can be any encoding supported by the system's "iconv"
  library routine.

-fwide-exec-charset=charset
  Set the wide execution character set, used for wide string
  and character constants.  The default is UTF-32 or UTF-16,
  whichever corresponds to the width of "wchar_t".  As with
  -ftarget-charset, charset can be any encoding supported
  by the system's "iconv" library routine; however, you
  will have problems with encodings that do not fit exactly
  in "wchar_t".

-finput-charset=charset
  Set the input character set, used for translation from
  the character set of the input file to the source character
  set used by GCC. If the locale does not specify, or GCC
  cannot get this information from the locale, the default
  is UTF-8. This can be overridden by either the locale
  or this command line option. Currently the command line option
  takes precedence if there's a conflict. charset can be any
  encoding supported by the system's "iconv" library routine.

$ g++-3.4 -finput-charset="cp1251" -o test test.cpp
$ 

P.S. А по-правильному надо использовать кодеки библиотек пользовательского интерфейса или gettext ...

pacify ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.