ошибка: заблудиться '\ 302' в программе - PullRequest
10 голосов
/ 02 марта 2011

Я использую Code :: Blocks в Ubuntu 10.10.Я подключил клавиатуру Mac и установил настройки клавиатуры на «Swiss German Mac».Теперь всякий раз, когда я пишу знак равенства, за которым следует пробел (что-то вроде width = 100), я получаю сообщение об ошибке: stray '\ 302' в программе.

Я знаю, что эта ошибка означает, что нетстандартный символ в текстовом файле.

Когда я удаляю символ пробела, программа компилируется очень хорошо.Это означает, что Code :: Blocks добавляет какой-то специальный символ.Но я не понимаю, почему это происходит.У кого-нибудь есть идея.

Какой символ обозначает «\ 302»?

[ОБНОВЛЕНИЕ] Я немного углубился в изучении проблемы.Я получаю это отклонение, когда я использую комбо shift + пробел.Теперь, когда я знаю, это случается не так часто.Но это все еще довольно раздражает, особенно при написании кода ... Кто-нибудь знает, есть ли способ отключить эту комбинацию в X11?

[решено] Благодаря ответу Юсселеса я смог решить «проблему»,На самом деле это скорее особенность.Shift + пробел создал пробел по умолчанию.Таким образом, изменив xmodmap с помощью

xmodmap -e "keycode  65 = space space space space space space"

, это поведение было отменено, и теперь все работает нормально.

СПАСИБО!

Ответы [ 8 ]

7 голосов
/ 02 марта 2011

\ 302 обозначает восьмеричное представление значения байта, с которым столкнулся компилятор.Это переводит в 11000010 в двоичном формате, что заставляет меня думать, что это начало двухбайтовой последовательности utf-8.Тогда эта последовательность должна быть:

11000010 10??????

Который кодирует двоичную точку Unicode 10 ??????, которая может быть любой от U + 80 до U + BF.

Несколько символовначиная с U + 80 - специальные пробелы и разрывы, которые обычно не отображаются в текстовом редакторе.

Возможно, это не ваш редактор, а Xorg, который генерирует эти символы из-за настроек клавиатуры.Попробуйте переключиться на обычную американскую клавиатуру и проверьте, не устранены ли проблемы.

7 голосов
/ 04 июля 2011

Поскольку вы уверены, что это вызвано нажатием shift+space, вы можете проверить, чем занимается сам X.Сначала запустите xev из командной строки, нажмите shift+space и проверьте вывод.Например, я вижу:

$ xev
KeyPress event, serial 29, synthetic NO, window 0x2000001,
    root 0x3a, subw 0x0, time 4114211795, (-576,-249), root:(414,593),
    state 0x0, keycode 50 (keysym 0xffe1, Shift_L), same_screen YES,
    XLookupString gives 0 bytes:
    XmbLookupString gives 0 bytes:
    XFilterEvent returns: False

KeyPress event, serial 29, synthetic NO, window 0x2000001,
    root 0x3a, subw 0x0, time 4114213059, (-576,-249), root:(414,593),
    state 0x1, keycode 65 (keysym 0x20, space), same_screen YES,
    XLookupString gives 1 bytes: (20) " "
    XmbLookupString gives 1 bytes: (20) " "
    XFilterEvent returns: False
...

Затем запустите xmodmap -pk и найдите код ключа (пробел должен быть 65, как указано выше, но проверьте вывод xev).Если вы видите что-то вроде

     65         0x0020 (space)

, тогда Х не делает этого.С другой стороны, если я выбираю символьную клавишу, которая является измененной shift, я вижу что-то вроде этого:

     58         0x006d (m)      0x004d (M)

Если у вас есть две или более клавишных символов для вашего кода клавишиХ виновник.В этом случае что-то вроде xmodmap -e 'keycode 65 space' должно работать.

0 голосов
/ 28 июня 2017

У меня возникла та же проблема, изменив файл примера us-ascii.Поэтому я конвертирую его в utf-8, вот команда gnu / linux:

iconv -c -t us-ascii -f utf-8 source_file -o dest_file

, а затем добавляю свои модификации ... больше ошибок нет!чтобы проверить исходную кодировку, используйте

file -i source_file

Я должен добавить не ascii символ, чтобы позволить iconv делать эту работу !! ??

0 голосов
/ 30 июня 2011

Если вы откроете свой файл в Emacs и зададите для параметра file-buffer-file-coding-system что-то вроде «unix» или некоторого разнообразия ascii, то при попытке сохранения вы получите предупреждение о том, что буфер содержит непредставимые символы иуказывает на них, чтобы вы могли их исправить.

0 голосов
/ 27 июня 2011

Я видел эту проблему в моем linux box с финской клавиатурой. Также случается с emacs и т. Д. У меня нет хорошего решения для этого, но предполагают, что сообщения о том, что это происходит в другом месте, также полезны ...

0 голосов
/ 02 марта 2011

Я сталкивался с такой проблемой при копировании и вставке с веб-страниц или других электронных документов. Общими виновниками были бы недействительные кавычки типа «вместо» или что-то подобное. Попробуйте использовать ошибку компилятора, чтобы указать, где в файле может быть ошибка.

0 голосов
/ 02 марта 2011

'\302' - это обозначение C для восьмеричного числа 302 8 , которое равно C2 16 и 194 10 .Так что это не ASCII.

Какой символ он отображает, зависит от кодировки.Например, в Latin-1 это символ Â.

0 голосов
/ 02 марта 2011

Звучит как проблема кодирования. Я годами не использовал code :: blocks, поэтому не уверен, позволяет ли он выбирать разные кодировки. Как насчет того, чтобы открыть файл кода с помощью gedit и сохранить его как UTF-8, а затем повторить попытку? Но звучит довольно странно, что вы получаете такую ​​проблему, используя пробелы.

...