Le codage par défaut de Java est Lorsqu'un fichier texte est codé dans Les lecteurs dont je parle sont: p> Il tourne que notre codage dépend du système d'exploitation, ce qui signifie que ce qui suit n'est pas vrai sur chaque système d'exploitation: P> ASCII code>. Oui? (Voir mon édition ci-dessous)
utf-8 code>? Comment un lecteur sache-t-il qu'il doit utiliser
utf-8 code>? P>
FileReader Code> S LI>
bufferedreader code> s de
socket code> s li>
scanner code> à partir de
système.in code> li>
edit h1>
'a'== 97
5 Réponses :
Le codage par défaut de Java dépend de votre système d'exploitation. Pour Windows, c'est normalement "Windows-1252", pour UNIX, il est typiquement "ISO-8859-1" ou "UTF-8". P>
Un lecteur connaît le codage correct car vous le dites le bon codage. Malheureusement, tous les lecteurs ne vous laissent pas faire cela (par exemple, fileReader code> ne) pas), vous devez donc utiliser un
INPUTStreamReader code>. P>.
FYI: Le codage sur Windows dépend de la langue du système d'exploitation. MSDN.MicRosoft.com/en-us/Library/ DD317756% 28vs.85% 29.aspx Mais essentiellement, vous êtes correct - le codage par défaut est le codage du système - utilisez-le à votre péril.
La propriété système pour l'encodage par défaut est fichier.exoding code> et cela dépend normalement de vos paramètres locaux (langue de victoire, comme indiqué ci-dessus, ainsi que les variables
LC _ * CODE> sur * Nix ).
@gustafc - merci pour l'information; J'ai regardé System.GetProperties () et je ne l'ai pas vu figurant parmi les propriétés standard, ainsi éditées de ma réponse. Je pense toujours que c'est une mauvaise idée de compter sur la valeur par défaut correctement définie.
Malheureusement, FilerAder est une classe de commodité pour lire des caractères dans le codage par défaut d'un fichier et rien de plus. Vous penseriez que cela vous permettrait de sélectionner également le jeu de caractères, mais ce n'est pas le cas. En fait, vous remarquerez que les signatures de constructeur sont identiques à des signatures constructrices code> Signature de fichier code>.
@kdgregory - Vous êtes correct sur fichier.excoding code> ne pas être une propriété standard; Il s'agit d'un détail de mise en œuvre que les développeurs ne doivent pas définir ou lire directement: Bugs.sun.com/ View_bug.doo?bug_id=4163515
Merci pour la réponse très claire et pour mentionner que fileReader code> ne le fait pas.
Vous pouvez commencer à obtenir l'idée ici Java Charset API P>
Notez que, selon le doc, p>
le codage du personnage natif du Le langage de programmation Java est UTF-16 P> blockQuote>
EDIT: H2>
Désolé, j'ai été appelé avant que je puisse finir cela, je n'aurais peut-être pas dû poster la réponse partielle telle qu'elle était. Quoi qu'il en soit, les autres réponses expliquent les détails, le point étant que le fichier natif Charset de chaque plate-forme ainsi que des charages de remplacement commun seront lus correctement par Java. p>
Bien que techniquement correct, ceci est sans importance ... L'encodage natif est uniquement utilisé dans Java B>. Lorsque les fichiers E / S sont terminés, les classes de lecteur utilisent l'encodage par défaut de la plate-forme, sauf si vous spécifiez une à l'aide des constructeurs pour un entréeStreamReader, qui prennent en charge les arguments de codage / charset.
Pour la plupart des lecteurs, Java utilise tout ce que le codage et le caractère définissez votre plate-forme - ceci peut être une certaine arôme d'ASCII ou UTF-8, ou quelque chose de plus exotique comme JIS (au Japon). Les caractères de cet ensemble sont ensuite convertis en UTF-16 que Java utilise en interne.
Il y a un travail de travail si le codage de la plate-forme est différent d'un codage de fichier (mes fichiers UTF-8 sont standard, mais ma plate-forme utilise le codage Windows-1252). Créez une instance InputStreamReader qui utilise le constructeur spécifiant le codage. P>
InputStreamReader myReader = new InputStreamReader(new FileInputStream(myFile),"UTF-8"); //read data myReader.close();
Non, je ne suis pas français. Je suis néerlandais. Je parle flamande.
Hah, je suis en fait à moitié néerlandais moi-même. J'ai oublié de tes gars folles folles.
Bien sûr, vous êtes néerlandais. Ce serait "Martin" en français, pas "Martijn" :)
Flamand? Tu veux dire flamand :)
Je refuse de faire référence à un peuple par un nom qui ressemble à quelque chose appartenant à un tissu. Flamand, je dis! :)
Comment un lecteur sache-t-il qu'il doit utiliser UTF-8? em> p>
Vous spécifiez normalement que vous-même fort> dans un
INPUTStreamReader code>
. Il a un constructeur qui prend le codage du personnage. Par exemple p>xxx pré> Tous les autres lecteurs (autant que je sache) utilise le codage de caractères par défaut de la plate-forme, ce qui peut en effet ne pas être le codage correct (tel que -cough - em>
cp-1252 code>). p>
Vous pouvez en théorie détecter également le codage du personnage automatique basé sur le Byte Commande Mark . Cela distingue les nombreux codages Unicode d'autres codages. Java SE n'a malheureusement pas d'API pour cela, mais vous pouvez accomplir homebrew one qui peut être utilisé pour remplacer
InputStreamreader code> comme dans l'exemple ci-dessus: p>
xxx pré> Modifier STRT> comme réponse sur votre édition: p>
afin que le codage dépend du système d'exploitation. Cela signifie donc que non sur chaque système d'exploitation, cela est vrai: em> p>
'a'== 97
Vous oubliez d'Ebcdic ... à Ebcdic, 'A'! = 97.
Haha, tu as raison. EBCDIC code> est en effet un codage exclusif (IBM) qui existait Suivant B> à
ASCII code> dans les temps hérités, mais à la fin
ASCII code > a obtenu la domination du monde. De nos jours, vous verrez
EBCDIC CODE> dans Old "Mainframes" uniquement (S / 390, VM et des consomptes) qui sont à son tour cependant configurable pour utiliser un fichier
ASCII code>.
C'est une affichage très approfondie et le code est bon. J'aurais pu juré que certaines des API détectent automatiquement les codages courants, mais cela aurait pu être destiné à des trucs de réseau uniquement (spécifiquement http).
En outre, le fait que 'a' == 97 code> est toujours vrai en Java ne doit pas nécessairement avoir à voir avec ASCII directement, mais est un effet de Java à l'aide de UTF-16 en interne.
J'aimerais aborder cette partie d'abord: P>
Le codage par défaut de Java est ASCII. Oui? P> blockQuote>
Il y a au moins 4 choses différentes dans l'environnement Java qui peut être qualifiée de "codage par défaut": p>
- La "briet par défaut" est ce que Java utilise pour convertir des octets en caractères (et
octet [] code> sur
string code>) au moment de l'exécution, lorsque rien d'autre n'est spécifié. Celui-ci dépend de la plate-forme, des paramètres, des arguments de ligne de commande, ... et est généralement simplement le codage par défaut de la plate-forme. LI>
- Le caractère interne codant pour que Java utilise dans
Char code> valeurs et
chaîne code> objets. Celui-ci est
toujours fort> utf-16 ! Il n'y a aucun moyen de le changer, c'est juste utf-16! Cela signifie qu'un char code> représentant
a code> a la valeur numérique 97 et un caractère représentant
π code> a toujours le numérique Valeur 960. LI>
- Le personnage codant pour que Java utilise pour stocker des constantes de chaîne dans les fichiers
.Class code>. Celui-ci est
toujours fort> utf-8. Il n'y a aucun moyen de le changer. Li> - Le charert utilise le compilateur Java pour interpréter le code source Java dans
.java code> fichiers. Celui-ci est par défaut à la branlette par défaut, mais peut être configuré à l'heure de la compilation. LI> ol>
Comment un lecteur sache-t-il qu'il doit utiliser UTF-8? P> blockQuote>
Ce n'est pas le cas. Si vous avez un fichier texte clair, vous devez STRY> DO STORT> connaître le codage pour le lire correctement. Si vous avez de la chance, vous pouvez deviner (par exemple, vous pouvez essayer le codage par défaut de la plate-forme), mais c'est un processus d'erreur d'erreur et, dans de nombreux cas, vous n'auriez même pas un moyen de réaliser que vous avez mal deviné. Ceci est
pas strong> spécifique à Java. C'est vrai pour tous les systèmes. P> Certains formats tels que XML et tous les formats à base de XML ont été conçus avec cette restriction à l'esprit et incluent un moyen de spécifier le codage dans les données, de sorte que la devinette n'est plus nécessaire. P>
Lire Le minimum absolu Tous les développeurs de logiciels absolument doivent connaître de manière positive à propos de Unicode et des ensembles de caractères (aucune excuse !) pour les détails. P>
J'ai trouvé cette question (et les réponses) très éducatives, merci!
La conclusion dans votre édition est pas b> correcte.
'A' == 97 CODE> est vrai sur tous les systèmes d'exploitation en Java, car à l'interne (pour char / chaîne) Java utilise UTF-16 partout. Seulement lorsque vous utilisez en quelque sorte l'encodage par défaut de la plate-forme (c'est-à-dire la conversion de Char / String en octets / octets [] sans spécification de codage explicitement) le résultat dépend de l'OS / Paramètres / ...