Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1] 2 3  Все   Вниз
  Печать  
Автор Тема: ошибочная (?) интерпретация "\n" в тексте  (Прочитано 24164 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« : 13-09-2007 13:01 » 

Господа,

работаю на 2003 студии на c#.

Ситуация интересная: прога должна работать на многих языках, посему для каждого есть свой файл ресурсов.
В текстах присутствует "\n".

Далее:
если у меня на компе немецко/англоязычная винда и прога стартует на одном из этих языков, то все ОК (т.е. "\n" таки преобразуется в новую строку).
Если же я стартую прогу на русском, то сам текст нормально отображается по-русски, а вот с "\n" проблема, бо вместо новой строки я вижу какой-то квадратик...
Аналогично и наоборот: на русскоязычной винде та же проблема возникает при запуске проги на английском...

Соответственно вопрос:
это вообще как? Почему это происходит? Это баг или как?  А черт его знает...

В мфц я такого не замечала...  Здесь была моя ладья...
Записан

холоднокровней, Маня, Ви не на работе
Tuborg
Команда клуба

ee
Offline Offline

« Ответ #1 : 13-09-2007 13:22 » 

Юникод?
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #2 : 13-09-2007 13:31 » 

Да фиг его знает. В 2005 они вобще это вырубили. \n в ресурсах ваще интерпретируется как... \n
Те хочешь принудительный перенос строки - делай поиск замену \\n на \n. Чёт меня этот до-диез достаёт.

А про русский-немецкий надо попробовать.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #3 : 13-09-2007 13:33 » 

Tuborg,

ну я как-то сразу исходила из того, что теоретически там, в c#, все юникод...

Сейчас попыталась поискать в свойствах проекта, но не нашла... Прости за тупость - Ты знаешь, где оно спрятано?
Записан

холоднокровней, Маня, Ви не на работе
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #4 : 13-09-2007 13:36 » 

Джон,

погоди, я уже вообще ничего не понимаю!
Если я набиваю текст, то я пишу "\n"! А откуда берется "\\n"?
Прости за вопрос, но то я чего-то явно не понимаю / не знаю...
Записан

холоднокровней, Маня, Ви не на работе
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #5 : 13-09-2007 14:05 » 

А эта скотинка думает что ты именно \ вместе с n хочешь показать. В С++ ресурсах тоже самое с "
если ты в редакторе ресурсов пишешь что-то типа

Чтобы закончить нажмите кнопку "ОК".

то в ресурсах это выглядит так:

Чтобы закончить нажмите кнопку ""ОК"".

 Хотя конечно с \n там получше. Ну и тп & для подчёркивания. Кстати навело на мыслю
эту штуку можно стилем отрубить (в С++) SS_NOPREFIX.
У диеза есть подобная штука наоборот, чтобы каждый раз не писать "c:\\programme\\"
делаешь просто @"c:\programme\" короче все спец символы игнорируются.
Попробуй в этом направлении покопать.

Хотя при чём тут локаль? Хм...
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #6 : 13-09-2007 14:24 » 

Джон,

интересно - я никогда этого не видела, а сейчас посмотрела и таки да - всюду стоит "\\n"!

Может я неправа, но теоретически "\\n" - спецсимвол, посему к локали никакого отношения иметь не может... Спецсимвол он и в Африке спецсимвол Ага
Далее, "\\n" встроено в какой-то текст, т.е. при обращении к ресурсам вся строка (включая спецсимволы) будет переведена в юникод, причем если исходить из того, что я вижу русские буквы, то это таки происходит!

Напрашивается вывод, что это нормально.
Но с другой стороны, я же должна иметь возможность, например, сидя в России на русской винде включить прогу на английском!

Короче, я уже ни фига не понимаю...
Записан

холоднокровней, Маня, Ви не на работе
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #7 : 13-09-2007 15:01 » 

к локали никакого отношения иметь не может

И я про тоже. А винда какая?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #8 : 13-09-2007 15:04 » 

xp Ага
Записан

холоднокровней, Маня, Ви не на работе
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #9 : 13-09-2007 15:53 » 

А что остальные языки? НАпример французский? Тоже не работает? Или работает?
Если точнь так же как немецкий, то тогда юникод надо ковырять.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #10 : 14-09-2007 08:04 » 

Джон,

спасибо за идею!
Проверила - франзузкий текст показывается верно.
Зато когда я включила китайский, то почесала в затылке - само сообщение проверить я не могла (его еще не перевели и оно появилось на английском), зато основная масса текстов была показана какими-то квадратиками (как и "\n"), т.е. они не были распознаны как буквы...

Видать, юникод не виноват, т.е. если бы это был он, то вообще ничего не было бы читабельно. А так какая-то смесь гремучая...
Я медленно прихожу к мысли, что там что-то у мелкомягких не то. Ну или моя женская логика сбоит Ага
Записан

холоднокровней, Маня, Ви не на работе
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #11 : 14-09-2007 09:20 » 

Это полный... Не может быть...

Мне тестеры сейчас дали комп с установленной на нем русской виндой.
То, что я увидела, наводит меня на мысль об выпить и забыться от ужаса Ага  Улыбаюсь)
Там происходит та же дрянъ!!! Т.е. вместо новых строк - квадратики!!!
Но это же нонсенс!!!
Тут же уже все сходится - установки винды и язык ресурсов!

Короче, я тихо ловлю крышу...  Жаль
Записан

холоднокровней, Маня, Ви не на работе
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #12 : 14-09-2007 11:01 » 

Сразу докладаю нарытое - проблему пока не решила, но уже выяснила вот что (оочень тщательно покопалась в коде Ага ) - может кому-то это понадобится:

в самих ресурсах при внесении текста набивали по привычке  "\n" , при считывании из ресурсов просто программно тихо заменяли на  "\r\n":

text = text.Replace(@"\n", "\r\n");

Попробовала убрать замену и сразу же выяснила, что текст показывается неверно, т.е. "\n" не распознается как служебный символ и отображается в тексте как естъ, т.е. как часть текста : "erunda polnaja\n" (тест проводила на немецкой винде с немецким же текстом).
Записан

холоднокровней, Маня, Ви не на работе
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #13 : 14-09-2007 11:52 » 

Результат!!!

Поубивать переводчиков!!!!
Эти ..., т.е. товарищи, которые нам совсем не товарищи, умудрились в части текстов пропустить "\\n" и внесли только "\n"...

Мда, а программеры таки виноваты... Оказывается, это уже было, просто я об этом не знала... Т.е. когда я сказала начальнику о прочине ошибки, он вспомнил, что прецедент уже был... И где он был раньше, когда я почти день на поиски потратила?Не понял

Еще раз всем спасибочки и приношу свои глубокие извинения за беспокойство.
Записан

холоднокровней, Маня, Ви не на работе
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #14 : 14-09-2007 14:52 » 

Willkommen in Club. Ага

Я уже почти всех переводчиков приучил. Но вот чех зараза. Постоянно забывает, что надо "" ставить вместо ".

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

А воспитать хороших переводчиков это арихважнейшая задача.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
pmoter2006
Гость
« Ответ #15 : 14-09-2007 21:50 » 

// Вместо \n надо писать System.Environment.NewLine
// Например:

string a = "the end " + System.Environment.NewLine;

//и ненадо разводить пустые полемики.
Записан
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #16 : 14-09-2007 22:17 » 

pmoter2006, ну ты блин и загнул... полемику... вместо привычного и простого , как не червивое яблоко, \n ставить какую то закорючку на пол экрана Улыбаюсь И как это они так ошиблись ? И как это они (ах они такие) развели полемику Улыбаюсь

сорри за резкость...  это всё гр****ный шарп. Вернее кривые руки его создателей
Записан

Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #17 : 15-09-2007 17:19 » 

pmoter2006, хм... а это идея. И что у тебя с переводчиками это прокатывает? Где брал таких?

Мои выдадут вот такое:

"это конец" + система.среда.НоваяЛиния

Ну, а насчёт полемики... Дык эт как посмотреть, ведь \n не есть \r\n. Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
pmoter2006
Гость
« Ответ #18 : 16-09-2007 08:09 » 

На разных сиситемах для перехода на новую строку может понадобиться разная последовательность спец символов. Таже проблема может возникнуть с разделителями десятичных знаков. Используйте системные переменные поставляемые средой выплнения, вместо того чтобы находить их самим.
Записан
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #19 : 16-09-2007 09:18 » 

pmoter2006,  +1
Записан

ещё один вопрос ...
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #20 : 16-09-2007 13:37 » 

На разных сиситемах для перехода на новую строку может понадобиться разная последовательность спец символов.

какая чушь! Стандарт рулит! разные системы просто ОБЯЗАНЫ пользоваться \r\n для перехода на новую строку. Зачем нарушать привычные вещи ?
Записан

nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #21 : 16-09-2007 15:03 » 

Алексей, родителем чуши являешься ты сейчас. Стандврт чего рулит? Языка??? Или еще чего?
Тебе для справки, в юникс системах работает не \r\n, а если не ошибаюсь просто \n.
Записан

ещё один вопрос ...
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #22 : 16-09-2007 15:39 » 

nikedeforest, хотя бы языка.

зы
а в юникс-системах (с) есть шарп ?  0:)
« Последнее редактирование: 16-09-2007 15:41 от Алексей1153++ » Записан

nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #23 : 16-09-2007 17:02 » 

И к стандарту какого языка ты хочешь прибегнуть? Что ты хочешь от туда извлечь? Ты видел хоть этот стандарт-то?
По поводу твоего "зы", вроде уже есть версии фрэймворка заточенные на никсовые системы. Если не ошибаюсь, это разработка сторонней конторы (в смысле не МАйкрософт), там пока нет переносимости ГУИ, но консоль уже работает.
В принципе строение .НЕТ ничем не мешает повторить путь Явы, технология в целом такая же. Так что дело за реализацией. Думаю взаимоотношения Майкрософт и Новелл нас к этому вполне могут привести в весьма не далеком будущем.
зы: Алексей, зачем ты постишь в этой ветке? Какой толк от твоих постов? Ты постоялец клуба, у тебя за две тысячи постов. По сути ты входишь в состав постояльцев-индикаторов клуба. Так что будут думать новички о клубе, читая твою ересь здесь? Надо нести что ли какой-то груз ответственности за то, что ты здесь пишешь. Как считаешь?
Записан

ещё один вопрос ...
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #24 : 16-09-2007 17:29 » 

nikedeforest, мне по барабану, что подумают, у остальных людей своё мнение тоже должно быть. А вот ты какой то агрессивный стал Улыбаюсь

Но если тебе очень неприятно мои посты видеть, говори в ЛС, что мне надо удалить, буду удалять.
« Последнее редактирование: 16-09-2007 17:32 от Алексей1153++ » Записан

nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #25 : 16-09-2007 18:08 » 

Удалять надо холиварные посты, которые уже заели достаточно. Ты заходишь в ветку .НЕТ и пишешь, что .НЕТ говно. Внимание вопрос: "зачем?". Это как придти в гости и сказать, ну у вас тут и дерьмо. Мода странная пошла, и не только у тебя. Ей бы уже давно пройти, а она наоборот возродилась. Вроде уже были и жаркие споры и разошлись уже, но все равно не проходят эти выкрики из подворотни. ИМенно из подворотни, потому что нет конкретной темы об этом, я эти слова читаю уже почти во всех темах, где запостились опред. пользователи.
А в этой теме посмотри. Ты, с видом гуру программинга, набрасываешься на человека (при чем на новичка)не разобравшись в теме. Тебе достаточно было в Яндексе набрать System.Environment.NewLine;, но ты не удосужился этого сделать.  Если наличие таких вещей тебя не смущает и тебе на это надо постоянно указывать в ЛС, то я уж не знаю как это назвать.
Записан

ещё один вопрос ...
Алексей++
кот глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #26 : 17-09-2007 03:41 » 

nikedeforest, процитируй, где я хоть 1 (один) раз сказал, что НЕТ - "говно" ? Где хоть слово про гуру ?

Я пишу, что не нравиться мне с моей точки зрения, ты защищаешь. И, наверное, правильно делаешь - потому что, если платформу никто защищать не будет, значит я прав Улыбаюсь И пусть я даже и не прав. Репутацию форума (если ты за неё боишься) я не порчу , ничего я такого не писал вовсе , ну а что обо мне люди подумают - это мне совершенно фиолетово

про "набрасывание на человека" - я ни капельки не сомневаюсь (и не сомневался) , что та закорючка есть и при том правильно работает Улыбаюсь Но искать то мне её зачем Не понял
« Последнее редактирование: 17-09-2007 03:46 от Алексей1153++ » Записан

Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #27 : 17-09-2007 07:50 » 

Мальчики,

я вас умоляю - остановитесь!!!! Ну ведь все можно решить спокойно!!! Уже ведь договаривались!!!

nikedeforest,

я сама недавно работаю в шарпе (студия 2003) и многое пока мне чаще мешает, чем помогает (я долго работала с шестой студией, оттуда и привычки, плюс мфц тоже во многом прозрачней, чем новый фрейм). Тут тоже все не так уж и однозначно. Ну разве это повод ссоритъся или злиться?

ПО поводу темы: как сказал Джон, "\n не есть \r\n"! В мфц в общем случае работают оба варианта (если речь идет о MessageBox или TRACE), хотя при этом же в TExtBox-е для организации переноса на новую строку надо использовать \r\n!

pmoter2006,

во-первых, спасибо за подсказку, я этого нигде не видела, теперь хоть знать буду!

Но! у меня тот же вопрос, что и у Джона - как это должно выглядеть в ресурсах???
Т.е. в обычной жизни я иду в файл .resx и вношу там свой текст с соответствующим ему идентификатором, т.е. на выходе имею:

   <data name="MY_TEST">
      <value>It is a Test System.Environment.NewLine for NL</value>
   </data>

Если я загружаю этот текст с помощью менеджера ресурсов:

                  string tmp_nl = m_RM.GetString("MY_TEST");

то на выходе вижу:
     "It is a Test System.Environment.NewLine for NL"

т.е. в этом виде оно несьедобно... Как это можно исправить (если вообще это возможно)? Возможно, надо ставить какие-то спецсимволы?
О проблемах с переводчиками повторять Джона не буду - ситуация одинакова и как ее решить в данной ситуации, я пока еще не знаю.

Проблема же заключается в том, что у нас все тексты сидят именно в ресурсах!
Записан

холоднокровней, Маня, Ви не на работе
Malaja
Команда клуба

de
Offline Offline
Пол: Женский

« Ответ #28 : 17-09-2007 08:47 » 

Вопрос вдогонку (просьба ногами не бить):

написала в ресурсах:

   <data name="MY_TEST">
      <value>It is a Test \r\n for NL</value>
   </data>

Загрузила:
    string tmp_nl = m_RM.GetString("MY_TEST");

А вот в переменной в результате получила что-то странное: 
               @"It is a Test \r\n for NL"

Откуда взялся значок ***  @  *** Не понял? Я же его не добавляю!!! А главное, в результате не происходит перенос строки! Т.е. \r\n не воспринимаются как NL!
Записан

холоднокровней, Маня, Ви не на работе
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #29 : 17-09-2007 10:40 » 

Вот ведь Иринка! Добрейшей души человек. А ведь погла и послать куда подальше. Ага

Ну в принципе всё правильно (только очень мягко, откуда столько такта? Ага ). Хочется только добавить - какие нафиг -никсы и другие платформы? О какой нафиг кроссплатформенности вы "полемите"? Ведь ясно же сказано - Уиндовс ИксПи.
Теоретики любимые до слёз. Когда ж вы наконец уже уясните, что реальная жизнь очень сильно отличается от книжных стандартов. Конечно хотелось бы чтобы всё было как в книжке. Но так бывает только в книжках и в кино. Вот есть у тебя ресурсов строчек эдак под 10000 из С++ проекта, которые портировали на С#, и которые теперь надо перевести на другие языки. А там полно \n. И что прикажете с ними делать? А с точки зрения начальства и клиентов ВСЁ УЖЕ ГОТОВО!!! И никто тебе времени не даст (читай не оплатит) всё заново делать.

И каким боком сюда вписываются ваши советы с системными переменными? Почему игнорируются замечания, что \n не есть \r\n? Где конкретные решения помогающие решить проблему поднятую в этой теме?

nikedeforest,  за что ты поставил +? За повторение азбучных истин? Какую пользу повторение уже сказанного привнесло в решение данной проблемы? В чём именно ты увидел помощь и дал положительную оценку? Причём здесь перевод строки в типографском смысле? Речь идёт о РЕСУРСАХ под ВИНДОЙ!!! А не о распечатке на принтере под Линуксом.

зы Ну а для Лёшки вобще все системы кроме шестёрки С++ чужды и враждебны. Оппозиция тоже должна быть. Иначе не будет развития. Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Страниц: [1] 2 3  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines