Ошибка: отклонение '\ 302' в программе
Я использую Code:: Blocks на Ubuntu 10.10. Я подключил клавиатуру Mac и установил настройки клавиатуры на "Swiss German Mac". Теперь всякий раз, когда я пишу знак равенства, за которым следует пробел (что-то вроде width = 100), я получаю сообщение об ошибке: в программе программа "302".
Я знаю, что эта ошибка означает, что в текстовом файле есть нестандартный символ.
Когда я удаляю символ пробела, программа компилируется просто отлично. Таким образом, Code:: Blocks добавляет какой-то особый символ. Но я не понимаю, почему это происходит. У кого-нибудь есть идея.
Какой символ означает '\ 302'?
[ОБНОВЛЕНИЕ]
Я немного углубился в проблему. Я использую комбинированный сдвиг + пробел. Теперь, когда я знаю, что этого не происходит часто. Но это все еще довольно раздражает, особенно при написании кода... Кто-нибудь знает, есть ли способ отключить эту комбо в X11?
[решено]
Благодаря бесполезному ответу я смог решить "проблему". Это скорее функция. Shift + пространство по умолчанию создало пробел. Поэтому, изменив xmodmap с помощью
xmodmap -e "keycode 65 = space space space space space space"
это поведение было переопределено, и теперь все работает нормально.
СПАСИБО!
Ответы
Ответ 1
Так как вы уверены, что это вызвано нажатием 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)
Тогда X не делает этого. С другой стороны, если я выбираю символьный ключ, который изменяется на shift
, я вижу что-то вроде этого:
58 0x006d (m) 0x004d (M)
Если у вас есть два или более клавишных ключей для вашего кодового ключа, Х является виновником. В этом случае должно работать что-то вроде xmodmap -e 'keycode 65 space'
.
Ответ 2
\ 302 означает восьмеричное представление значения байта, с которым столкнулся компилятор. Он преобразуется в 11000010 в двоичном формате, что заставляет меня думать, что это начало двухбайтовой последовательности utf-8. Тогда эта последовательность должна быть:
11000010 10??????
Кодирует двоичную юникодную точку 10, которая может быть от U + 80 до U + BF.
Несколько символов, начинающихся с U + 80, представляют собой специальные пробелы и разрывы, которые обычно не отображаются внутри текстового редактора.
Возможно, это не ваш редактор, а Xorg, который испускает эти символы из-за настроек вашей клавиатуры. Попробуйте переключиться на общую клавиатуру США и проверьте, не исчезли ли проблемы.
Ответ 3
Это звучит как проблема кодирования. Я не использовал код:: блоки в течение многих лет, поэтому не уверен, что он позволяет вам выбирать разные кодировки. Как насчет открытия вашего файла кода с помощью gedit и сохранения его как UTF-8, а затем повторите попытку? Но звучит довольно странно, что вы получаете такую проблему, используя пробельные символы.
Ответ 4
'\302'
- обозначение C для восьмеричного номера 302 8, которое равно C2 16 и 194 10. Так что это не ASCII.
Какой символ, который он отображает, зависит от кодировки. В латинском-1 это, например, символ Â.
Ответ 5
Я видел этот тип проблемы при копировании и вставке с веб-страниц или других электронных документов. Обычными виновниками были бы недопустимые цитаты типа `вместо 'или что-то подобное. Попробуйте использовать ошибку компилятора, чтобы указать вам, где в файле может быть ошибка.
Ответ 6
Я видел эту проблему в своей Linux-коробке с финской клавиатурой. Также случается с emacs и т.д. У меня нет хорошего решения для этого, но угадывать сообщения о том, что это происходит в другом месте, также полезно...
Ответ 7
Если вы откроете свой файл в Emacs и set-buffer-file-coding-system для чего-то вроде "unix" или какого-либо асиального сорта, то при попытке сохранить его предупредит, что буфер содержит недопредставленные символы и указывает на них, чтобы вы могли их исправить.
Ответ 8
У меня была такая же проблема, если изменить файл примера us-ascii.
Поэтому я конвертирую его в utf-8, вот команда gnu/linux:
iconv -c -t us-ascii -f utf-8 source_file -o dest_file
а затем добавьте мои изменения... больше ошибок!
для проверки исходного кодирования используйте
file -i source_file
Я должен добавить символ non ascii, чтобы позволить iconv выполнять задание!!??