Суббота, 2025-02-01, 00:49:22
Главная Регистрация RSS
Приветствую Вас, Гость
Форма входа
Мини-чат
Главная » Статьи » Мои статьи

Перевод строки в java под win и nix

Как кодируются окончания строк?


Исторически так сложилось, что в разных операционных системах
по-разному кодировалась текстовая информация. В силу этого, на заре
компьютерной эры компьютеры не могли обмениваться информацией. Но
постепенно были выработаны стандартные способы кодировки, и большая
часть проблем, таким образом, разрешилась.


Однако, одна неприятная деталь, все-таки осталась до сих пор. Речь о том, как кодировать конец строки. Во всех Unix-подобных системах принято конец текстовой строки обозначать одним
символом «\n». Но, компания Microsoft пошла своим путем и в своих операционных системах стала для завершения строки использовать комбинацию двух символов «\r\n».


Это, несколько странное решение, но с ним приходится мириться, пока есть на свете детище Билла Гейтса.


В результате такого неоднозначного поведения файлы, созданные в
Windows, не всегда правильно могут быть прочитаны в Unix, и наоборот.
Почему, не всегда? Дело в том, что разработчики программ для просмотра
текстовых файлов хорошо знают эту проблему, и обычно правильно
интерпретируют концы строк вне зависимости от того, как они
закодированы.


Поэтому обычные пользователи компьютеров не замечают существования
этой проблемы. Однако, программистам нужно всегда учитывать, эту
особенность. Как же это сделать?


В C# справиться с этой ситуацией очень просто. В объекте Environment
есть свойство NewLine, которое как раз содержит правильные коды
завершения строки. В Windows это свойство возвращает «\r\n», а в Unix
«\n». Если мы напишем:



1 
2
3
4
using (StreamWriter sw = new StreamWriter("out.txt")) 
{
sw.WriteLine("строка 1 \n строка 1");
}


То такой код будет правильно работать только по Unix. Если заменить строчку с выводом в файл на следующую:



1 
sw.WriteLine("строка 1 \r\n строка 1");


То мы получим версию только для Windows. Правильно же написать так:



1 
sw.WriteLine("строка 1" + Environment.NewLine + "строка 1");


В этом случае наш код всегда будет работать правильно.


Как видите, решить проблему очень просто. Тем не менее, нельзя забывать про существование такой особенности.


ссылка на источник
Категория: Мои статьи | Добавил: CHerry (2011-11-01)
Просмотров: 2820 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]