web-dev-qa-db-fra.com

Caractère illégal lors de la tentative de compilation du code Java

J'ai un programme qui permet à un utilisateur de saisir du code Java dans une zone de texte riche, puis de le compiler à l'aide du compilateur Java. Chaque fois que j'essaie de compiler le code que j'ai écrit, un message d'erreur m'indique que le caractère illégal que j'ai au début de mon code est illégal. C'est l'erreur que le compilateur me donne:

C:\Users\Travis Michael>"\Program Files\Java\jdk1.6.0_17\bin\javac" Test.Java
Test.Java:1: illegal character: \187
public class Test
 ^
Test.Java:1: illegal character: \191
public class Test
  ^
2 errors
21
muckdog12

La nomenclature est générée par exemple par File.WriteAllText () ou StreamWriter lorsque vous ne spécifiez pas de codage. La valeur par défaut consiste à utiliser le codage UTF8 et à générer une nomenclature. Vous pouvez en informer le compilateur Java avec son option de ligne de commande -encoding.

Le chemin de moindre résistance consiste à éviter de générer la nomenclature. Faites-le en spécifiant System.Text.Encoding.Default, qui écrira le fichier avec les caractères de la page de code par défaut de votre système d'exploitation et n'écrira pas de nomenclature. Utilisez la surcharge File.WriteAllText (String, String, Encoding) ou le constructeur StreamWriter (String, Boolean, Encoding).

Assurez-vous simplement que le fichier que vous créez ne soit pas compilé par une machine située dans un autre coin du monde. Il produira mojibake .

17
Hans Passant

C'est une marque d'ordre des octets, comme tout le monde le dit. 

javac ne comprend pas la nomenclature, pas même lorsque vous essayez quelque chose comme

javac -encoding UTF8 Test.Java

Vous devez supprimer la nomenclature ou convertir votre fichier source en un autre encodage. Notepad ++ peut convertir un seul fichier d'encodage, je ne connais pas d'utilitaire de traitement par lots sur la plate-forme Windows pour cela.

Le compilateur Java supposera que le fichier correspond au codage par défaut de votre plate-forme. Par conséquent, si vous l'utilisez, vous n'avez pas à spécifier le codage.

12
zneo
  1. Si vous utilisez un IDE, spécifiez le codage du fichier Java (via le panneau des propriétés).
  2. Si vous n'utilisez PAS d'IDE, utilisez un éditeur de texte avancé (je peux recommander Notepad ++ ) et définissez le codage sur "UTF sans nomenclature" ou "ANSI", si cela vous convient.
4
Bozho

http://en.wikipedia.org/wiki/Byte_order_mark

La marque d'ordre des octets (BOM) est un Unicode caractère utilisé pour signaler le endianness (ordre d'octet) d'un fichier texte ou flux. Son code est U + FEFF . L'utilisation de la nomenclature est facultative et, le cas échéant, devrait apparaître au début du texte courant. Au-delà de son utilisation spécifique en tant que indicateur d'ordre d'octet, la nomenclature le caractère peut également indiquer lequel de les différentes représentations Unicode le texte est encodé en.

La nomenclature est un caractère original que vous trouvez parfois au début des flux Unicode, ce qui vous donne un indice sur le codage. Il est généralement manipulé de manière invisible par le traitement des chaînes en Java. Vous devez donc l'avoir confondu, mais sans voir votre code, il est difficile de voir où.

Vous pourrez peut-être résoudre le problème de façon triviale en supprimant manuellement la nomenclature de la chaîne avant de l'envoyer à javac. Il s’agit probablement d’espace, essayez donc d’appeler trim() sur la chaîne en entrée et d’alimenter sa sortie en javac.

3
skaffman

Dans Android Studio

1. Menu -> Edit -> Select All
2. Menu -> Edit -> Copy
  1. Ouvrez le nouveau Notepad.exe

Dans le bloc-notes

4. Menu -> Edit -> Paste
5. Menu -> Edit -> Select All
6. Menu -> Edit -> Copy 

De retour dans Android Studio

7. Menu -> Edit -> Paste
2
Ingo

C'est un problème lié au caractère BOM (Byte Order Mark). Ordre des octets Mark BOM est un caractère Unicode utilisé pour définir un ordre d'octets de fichier texte et vient au début du fichier. Eclipse n'autorise pas ce caractère au début de votre fichier, vous devez donc le supprimer. Pour ce faire, utilisez un éditeur de texte enrichi comme Notepad ++ et enregistrez le fichier avec le codage "UTF-8 sans nomenclature". Cela devrait résoudre le problème.

I have copy pasted the some content from a website to a Notepad++ editor,
it shows the "LS" with black background. Have deleted the "LS" content and 
have copy the same content from notepad++ to Java file, it works fine.
2
anand krish

J'ai résolu ce problème en cliquant avec le bouton droit de la souris sur mon fichier de programme textEdit, en sélectionnant [substitutions] et en désélectionnant les guillemets intelligents.

2
Bobby Iveson

au lieu d’obtenir Notepad ++, Vous pouvez simplement ouvrir le fichier avec Wordpad , puis enregistrer en tant que document brut

1
HelpNeeded

Même si j’étais confronté à ce problème, j’utilisais notepad ++ pour coder. Il est très pratique de taper le code dans notepad ++. Cependant, après la compilation, le message d'erreur "erreur: caractère non autorisé: '\ u00bb'" s'affiche. Solution: Commencez à écrire le code dans l’ancienne version de Notepad (qui sera présent par défaut sur votre PC) et enregistrez-le. Plus tard, les modifications peuvent être faites en utilisant notepad ++ . Ça marche !!!

0
Akhil Arkyath