Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > utf-8


Автор: Tony 27.11.2007, 01:51
Проветик всем. smile 
Написал прогу исползующую файл. В файле буквы англиские и латышские. Соответственно 4итаю файл так:
Код

    BufferedReader reader = new BufferedReader(new InputStreamReader(fileInput,"utf-8"));
    String line = null;
    System.out.println(reader.readLine());
.................

Программа отли4но работает под Линух. Перехожу на винду.Пишу файл сохраняю его в .тхт в утф-8. И вот проблема, по4ему то, потом когда прога 4итает появляется  в первой страке символ: "?". По4ему появляется не понятно. 4то ещё интерсно так ето то 4то. Если посмотреть в NotePAd++ файл из линукса .тхт то он кодитовки: ANSI As Utf-8,a видовский просто UTF-8. Такое ощущение 4то у них разное понятие Утф-8.  smile 
П.с. jdk .1.6
Если файл с содержимим: iii. To reader.readLine(); вернёт ?iii

Автор: Tony 27.11.2007, 02:25
решил так:
Код

    if (key.substring(0,1).getBytes()[0] == 63){
                            key = key.substring(1);
                        }

Вырезать первий символ. Но не хорашо это :/  smile 

Автор: Vasay 27.11.2007, 05:52
А откуда приходят данные для сохранения?

Автор: skhilkov 27.11.2007, 06:45
Tony,  проблема в том, что "консоль" винды использует по умолчанию другую кодировку, чем гуйные приложения той же винды. Например, у меня вместо cp1251 кажется, стоит cp866. Поэтому при выводе на консоль попробуй сконвертировать строку в ету кодировку. Для теста попробуй то что выводишь на консоль написать в какое-нибудь окошко.....  
Надеюсь поможет...... если я не ошибаюсь ))

Автор: _Michael 27.11.2007, 10:19
Tony, прочти http://ru.wikipedia.org/wiki/%D0%AE%D0%BD%D0%B8%D0%BA%D0%BE%D0%B4#.D0.9F.D0.BE.D1.80.D1.8F.D0.B4.D0.BE.D0.BA_.D0.B1.D0.B0.D0.B9.D1.82.D0.BE.D0.B2
предполагаю что твой "?" в начале первой строки ето и есть ети "EF BB BF" из которых начинается файл. А  BufferedReader который ты  используеш, наверное не знает что первые байты надо проверять поскольку они указывают кодировку в которой сохранен файл, и поетому ты указал что формат utf-8 и все - он с первого же байта и читает. smile 
А в Линуксе можно предположить (не утверждаю поскольку не знаю) такого нету и поетому и знака вопроса тоже там нет. smile

Автор: Tony 27.11.2007, 11:22
skhilkov,  етo ne тольско в консоле, но и в Еклипсе.

_Michael, по4итаю. Но как я вижу решениа толкового нету.

Автор: w1nd 27.11.2007, 11:37
Цитата(_Michael @  27.11.2007,  10:19 Найти цитируемый пост)
наверное не знает что первые байты надо проверять поскольку они указывают кодировку в которой сохранен файл

Потому что нет такого правила. Эти сигнатуры какие-то совершенно левые товарищи придумали, никакого стандарта на этот счёт, ЕМНИП, нет. Так что просто не редактируйте utf-8 файлы нотепадом - это он гадит.

Автор: Tony 27.11.2007, 11:51
Цитата(w1nd @ 27.11.2007,  11:37)
Цитата(_Michael @  27.11.2007,  10:19 Найти цитируемый пост)
наверное не знает что первые байты надо проверять поскольку они указывают кодировку в которой сохранен файл

Потому что нет такого правила. Эти сигнатуры какие-то совершенно левые товарищи придумали, никакого стандарта на этот счёт, ЕМНИП, нет. Так что просто не редактируйте utf-8 файлы нотепадом - это он гадит.

Я WordPadom  редактил tam v utf-8. Даже если Noteped++  взять то всё равно будет ?

Автор: w1nd 27.11.2007, 14:36
Цитата(Tony @  27.11.2007,  11:51 Найти цитируемый пост)
Даже если Noteped++  взять то всё равно будет ?

Сомнительно.

Автор: Tony 27.11.2007, 21:48
Цитата(w1nd @ 27.11.2007,  14:36)
Цитата(Tony @  27.11.2007,  11:51 Найти цитируемый пост)
Даже если Noteped++  взять то всё равно будет ?

Сомнительно.

Подозрительно  smile 

Автор: Platon 27.11.2007, 22:17
Даа, эта метка в utf файлах как бельмо в глазу... хочется избавиться, а тем, что есть не получается :(
Я видимо маньяк, но делаю все utf-8 файлы в IDEA или ZendStudio, никаких BOM меток нет ^_^

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)