2014-07-11 4 views
0

J'écris un nouveau fichier avec des lignes et j'ai besoin d'utf-8 avec BOM. Dans mon code, j'ajouter nomenclature de la façon la plus simple:BOM sous Windows et Unix

printStream.print('\ufeff'); 
// print lines 

Et Win7 cette méthode de travail bien, mais quand j'exécute mon pot dans Unix je vois « ? » à prolog et "utf-8 sans encodage bom", comment puis-je le réparer? Crossplatform ... RÉPONSE préféré:

char[] c = {0xEF, 0xBB, 0xBF}; 
     for(int i=0; i<3; i++){ 
      printStream.write(c[i]); 
     } 
+0

voir la vous le fichier avec exactement le même outil ou utilisez-vous os téléspectateurs spécifiques? Si spécifique à l'OS, la visionneuse sur Unix pourrait ne pas interpréter le bom correctement. – Thomas

+0

Même outil, Notepad ++. Je le génère sur Unix, l'ajoute à l'archive et l'ouvre dans Windows (je n'ai qu'un système SCP vers Unix) – bearhunterUA

+0

On dirait que la nomenclature n'est pas écrite directement mais devient encodée en UTF-8 –

Répondre

2

Je ne suis pas sûr printStream.print('\ufeff'); est la bonne façon d'écrire l'utf-8 BOM. Vous pouvez essayer d'écrire directement les octets EF BB BF.

Exemple:

char[] bom = { 0xEF, 0xBB, 0xBF }; 
//or byte[] bom= { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF }; 
printStream.write(bom); //directly write the bytes 
+0

pouvez-vous écrire un exemple avec printStream.print ('')? – bearhunterUA

+0

char [] c = {0xEF, 0xBB, 0xBF}; pour (int i = 0; i <3; i ++) { printStream.print (c [i]); } ne fonctionne pas – bearhunterUA

+0

Il devrait sortir comme deux octets seulement. –