Question

Votre logiciel gère-t-il les caractères de nouvelle ligne des autres systèmes?

Linux/BSD    linefeed         ^J    10     x0A
Windows/IBM  return linefeed  ^M^J  13 10  x0D x0A
old Macs     return           ^M    13     x0D
others?

Pour des raisons de folie, je vais utiliser la version Linux du caractère de nouvelle ligne dans mes fichiers texte. Mais, lorsque j'apporte mes fichiers texte pour indiquer Windows, certains programmes ne fonctionnent pas correctement avec les caractères de nouvelle ligne de mon texte. Comment géreriez-vous cela?

Était-ce utile?

La solution

Comme on dit, soyez strict dans ce que vous écrivez et libéral dans ce que vous lisez.

Votre application devrait pouvoir fonctionner correctement en lisant les deux fins de ligne. Si vous souhaitez utiliser des sauts de ligne et éventuellement déranger les utilisateurs de Windows, c'est très bien.

Sauf pour le Bloc-notes, la plupart des programmes avec lesquels je joue semblent être satisfaits des deux méthodes.

(Et j'utilise Cygwin sous Windows, ce qui rend tout intéressant)

Autres conseils

La distribution Python standard est livrée avec deux scripts de ligne de commande (dans Outils / scripts) appelés crlf.py et lfcr.py pouvant effectuer la conversion entre les fins de ligne Windows et Unix / Linux.

[Source]

Dans .NET, les nouvelles lignes sont désignées par Environment.NewLine , de sorte que le cadre est conçu de manière à prendre quelle que soit la nouvelle ligne du système (CR + LF ou CR uniquement ou LF). uniquement) à utiliser au moment de l'exécution. Bien sûr, cela est finalement utile en Mono.

Je pense que vous constaterez que la plupart des programmes Windows modernes (à l’exception notable de Notepad) gèrent parfaitement les fichiers ne contenant que des lignes. Toutefois, les fichiers générés avec les programmes Windows ont toujours tendance à se terminer par crlf.

La plupart du temps, les fins de lignes seront automatiquement gérées de manière spécifique à la plate-forme par la bibliothèque d'exécution. Par exemple, un programme C qui ouvre un fichier avec fopen (..., "r") verra les lignes de manière cohérente (saut de ligne uniquement) sur n’importe quelle plate-forme, indépendamment des fins de ligne réelles. .

Pour autant que je sache, seul le Bloc-notes a un problème avec les séparateurs de ligne. Pratiquement tous les logiciels du monde acceptent l’un ou l’autre de ces trois types de séparateurs, ainsi que d’autres. Malheureusement, Notepad est l'éditeur de premier recours pour la plupart des utilisateurs d'ordinateurs de nos jours. Je pense que c'est extrêmement irresponsable de Microsoft de laisser cette situation se perpétuer. Je n'ai jamais joué avec Vista, mais je pense que le problème existe toujours là-bas, comme dans XP. Tout le monde est au courant de la prochaine version?

Comme d'autres l'ont dit, il y a beaucoup de convertisseurs (assez triviaux) dans les cas où le besoin s'en fait sentir. Notez que si vous effectuez le transfert avec FTP en mode Ascii, la conversion sera automatiquement effectuée ...

En effet, Notepad est le programme le plus proéminent ayant un problème avec la fin de la FL ...

Les plus ennuyeux que j'ai vus sont les fichiers texte avec fin de ligne mixte, réalisés essentiellement par des personnes modifiant un fichier Windows sous Unix, ou des utilitaires ajoutant des éléments sans vérifier le format correct.

Pour être heureux, il suffit de suivre les recommandations du standard.

http://unicode.org/standard/reports/tr13/tr13- 5.html

Et proposez des options dans des cas particuliers, tels que l'ancien MacOS. Ou gérez le cas automatiquement si vous pouvez les détecter de manière fiable.

Je vous recommande de formater votre texte en style Unix. Oubliez les utilisateurs de Windows. Parce qu'aucun utilisateur Windows n'utilise du texte brut pour le document ou les données. Ils seront mécontents si vous passez du texte brut. Ils attendent toujours un document Word ou Excel. Même s’ils utilisent des fichiers texte, le seul problème qu’ils auront, c’est d’afficher un texte étrange.

Mais les utilisateurs Unix constateront que tous les outils fonctionnent de manière incorrecte. Respectez scrupuleusement les normes, en particulier pour Unix.

PS. Oh, si votre utilisateur Windows est un développeur, formatez-le simplement avec du texte sous Unix et dites-lui que c'est le fichier sous Unix.

Vous ne savez pas exactement ce que vous entendez par «traiter», mais vous pouvez simplement dire quelque chose comme:

string convertLineBreaks(String line, String lineBreakYouWant) {
  replace all ^M^J or ^M or ^J in line with lineBreakYouWant

  return line
}

Modifier: Je suppose qu'après avoir relu votre question, vous voulez dire comment vous traitez avec les programmes d'autres personnes qui ne peuvent pas gérer les sauts de ligne incorrects (pour le système cible).

Je suggérerais 1) d'utiliser un programme capable de gérer ou 2) d'exécuter vos fichiers via un script qui recherche les sauts de ligne de tout type puis les convertit en un type adapté à votre système.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top