Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
2 / 2 / 2
Регистрация: 13.03.2014
Сообщений: 458

Изменение кодировки при чтении файла CSV

16.09.2024, 13:56. Показов 1647. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую. Информационная система формирует CSV файл с информацией. В приложении нужно получить информацию из этого файла. Использую такой способ:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
if (OFD.ShowDialog() == DialogResult.OK)
{
    // получаем строки таблицы из файла
    var lines = File.ReadAllLines(OFD.FileName);   
    // просматриваем каждую строку
    foreach (var line in lines)
    {
            // разбиваем строку на поля по разделителю
            var cells = line.Split(';');
            // выводим текст ячейки
            XtraMessageBox.Show(cells[2].ToString(), "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information);
    }
}
Но происходит проблема с кодировкой - текст на кириллице отображается в виде знаков вопроса. Как это исправить?
Миниатюры
Изменение кодировки при чтении файла CSV  
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.09.2024, 13:56
Ответы с готовыми решениями:

Сбой кодировки при чтении кириллицы
Друзья, помогите пожалуйста! Программа не хочет читать кириллицу Console.Write("Выберите файл: "); ...

Определение кодировки при чтении из файла
Подскажите как причитать из файла, чтобы содержимое richtextbox было идентичным содержанию файла using (FileStream...

Неправильная кодировка при чтении csv
Проблема в чтении файла csv, код рабочий написал в консольке все работало, перекинул его в проект WPF перестал понимать кодировку csv. ...

20
 Аватар для Andrey-MSK
3349 / 2235 / 388
Регистрация: 14.08.2018
Сообщений: 7,557
Записей в блоге: 4
16.09.2024, 14:00
Цитата Сообщение от 1inkin1 Посмотреть сообщение
Как это исправить?
В какой кодировке приходят данные? Если кодировка известна, то переведите их в Unicode и всё...
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,898
Записей в блоге: 1
16.09.2024, 14:13
Лучший ответ Сообщение было отмечено OwenGlendower как решение

Решение

Цитата Сообщение от 1inkin1 Посмотреть сообщение
Как это исправить?
Указать правильную кодировку. Например:
C#
4
    var lines = File.ReadAllLines(OFD.FileName, Encoding.GetEncoding(1251));
Это исходя из предположения что кодировка известна заранее. Если нет, то есть способы угадать, но надежнее знать заранее. Проще говоря - договориться о кодировке.
1
2 / 2 / 2
Регистрация: 13.03.2014
Сообщений: 458
16.09.2024, 14:13  [ТС]
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
В какой кодировке приходят данные?
неизвестно, но в Excel открывается в нормальном виде
0
 Аватар для Andrey-MSK
3349 / 2235 / 388
Регистрация: 14.08.2018
Сообщений: 7,557
Записей в блоге: 4
16.09.2024, 14:15
Цитата Сообщение от 1inkin1 Посмотреть сообщение
неизвестно
Откройте в Notepad++ и посмотрите кодировку в строке статуса.
0
2 / 2 / 2
Регистрация: 13.03.2014
Сообщений: 458
16.09.2024, 14:21  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Encoding.GetEncoding(1251)
выдает ошибку
Code
1
System.NotSupportedException: "No data is available for encoding 1251. For information on defining a custom encoding, see the documentation for the Encoding.RegisterProvider method."
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
посмотрите кодировку в строке статуса
Windows-1251
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,898
Записей в блоге: 1
16.09.2024, 14:38
Цитата Сообщение от 1inkin1 Посмотреть сообщение
выдает ошибку
Добавьте в начало метода Main строку
C#
1
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
P.S. Если бы вы не поленились прочитать текст ошибки где советуют прочитать документацию по Encoding.RegisterProvider, то сами смогли бы исправить ошибку.
1
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
17.09.2024, 15:57
Цитата Сообщение от OwenGlendower Посмотреть сообщение
P.S. Если бы вы не поленились прочитать текст ошибки где советуют прочитать документацию по Encoding.RegisterProvider, то сами смогли бы исправить ошибку.
не поленился и прочитал о методе до вашего ответа, но не нашёл почему решение должно быть именно таким какое вы привели.
0
HF
 Аватар для HF
1316 / 895 / 200
Регистрация: 09.09.2011
Сообщений: 2,687
Записей в блоге: 2
17.09.2024, 18:20
Цитата Сообщение от belalugoci Посмотреть сообщение
не поленился и прочитал о методе до вашего ответа, но не нашёл почему решение должно быть именно таким какое вы привели.
Не поленитесь и запустите код ТСа и попытайтесь решить проблему без указанного решения. Ответ очевиден.
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
18.09.2024, 04:14
Цитата Сообщение от HF Посмотреть сообщение
Не поленитесь и запустите код ТСа и попытайтесь решить проблему без указанного решения. Ответ очевиден.
мы говорим о конкретном указании OwenGlendower на чтение конкретного описания, я его открыл, там не увидел подобного ответа, отсюда и моё сообщение (а моё сообщение только о том, что не уместно подобным образом высказываться, тем более администратору). То что вы считаете это очевидным не значит что это очевидно другим. Мы все еще в разделе новичков, забывать про это не нужно. Откуда взялась необходимость написания такой строки и почему именно такой?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,898
Записей в блоге: 1
18.09.2024, 10:37
Цитата Сообщение от belalugoci Посмотреть сообщение
Откуда взялась необходимость написания такой строки и почему именно такой?
Код выдал исключение что кодировка 1251 не поддерживается. В исключении советуют прочитать документацию по методу RegisterProvider. Там видно что метод принимает EncodingProvider и в описании поясняется "The RegisterProvider method allows you to register a class derived from EncodingProvider that makes character encodings available on a platform that does not otherwise support them.". Следующий шаг - понять какой провайдер требуется. В тексте упоминается только один провайдер - CodePagesEncodingProvider. В его описании говорится что он добавляет поддержку различных code pages. То что нам требуется. Финальный шаг - понять как получить экземпляр CodePagesEncodingProvider. Через new это не сделать, но в документации говорится про свойство Instance: Retrieve a CodePagesEncodingProvider object from the static CodePagesEncodingProvider.Instance property. Соединяем всё вместе и получаем ответ.

Цитата Сообщение от belalugoci Посмотреть сообщение
а моё сообщение только о том, что не уместно подобным образом высказываться
Ваше сообщение о том что вы не смогли найти решение в документации. Другие, надеюсь, смогут. Да, готового ответа в документации нет. Это означает что чтение документации Microsoft отдельный навык который требуется развивать. Насчет неуместности моего ответа я не согласен. Неправильно было бы дать только ссылку на документацию и сказать что там всё ясно написано.
0
18.09.2024, 11:03

Не по теме:

Цитата Сообщение от OwenGlendower Посмотреть сообщение
Соединяем всё вместе и получаем ответ.
это потому что вы знаете как соединять, для меня это не очевидно.

Цитата Сообщение от OwenGlendower Посмотреть сообщение
Ваше сообщение о том что вы не смогли найти решение в документации.
в данном случае я выступаю с позиции автора статьи, которому вы и адресовали ответ. Раз он не нашёл, а я пройдя по стопам так же не увидел такого решения, то явление имеет место быть.

Цитата Сообщение от OwenGlendower Посмотреть сообщение
Другие, надеюсь, смогут
у вас была конкретная претензия к человеку, причем здесь другие?

Цитата Сообщение от OwenGlendower Посмотреть сообщение
Да, готового ответа в документации нет. Это означает что чтение документации Microsoft отдельный навык который требуется развивать
А никто в этом не сомневается. Но не забывайте что это раздел для новичков и нет никакого тестирования для пропуска в этот раздел, где сначала проверяется этот навык, а значит вы вполне можете говорить с человеком, у которого этого навыка нет, или навык есть, как у меня, но нет знаний в каких-то других аспектах C# которые бы привели к решению. Вы же просто и без затей назвали человека лентяем, я об этом вам и пишу. Для администратора это недопустимо.

Цитата Сообщение от OwenGlendower Посмотреть сообщение
Насчет неуместности моего ответа я не согласен. Неправильно было бы дать только ссылку на документацию и сказать что там всё ясно написано.
Неправильно человека называть лентяем.

Вместо вашего
Цитата Сообщение от OwenGlendower Посмотреть сообщение
P.S. Если бы вы не поленились прочитать текст ошибки где советуют прочитать документацию по Encoding.RegisterProvider, то сами смогли бы исправить ошибку.
вполне достаточно было написать: "Данное решение доступно при прочтении документации по Encoding.RegisterProvider"

0
18.09.2024, 12:38

Не по теме:

Цитата Сообщение от belalugoci Посмотреть сообщение
это потому что вы знаете как соединять, для меня это не очевидно.
Даже с объяснением?

Цитата Сообщение от belalugoci Посмотреть сообщение
Раз он не нашёл, а я пройдя по стопам так же не увидел такого решения, то явление имеет место быть.
а) Вы точно знаете что он искал?
б) В существовании явления я не сомневаюсь. Поэтому и написал что "готового ответа в документации нет".

Цитата Сообщение от belalugoci Посмотреть сообщение
у вас была конкретная претензия к человеку, причем здесь другие?
Ответы пишутся не только для авторов, но и на будущее, для тех кто будет искать ответ на аналогичный вопрос.

Цитата Сообщение от belalugoci Посмотреть сообщение
не забывайте что это раздел для новичков и нет никакого тестирования для пропуска в этот раздел, где сначала проверяется этот навык
Не забыл. Именно поэтому я привел решение и дополнительно написал что следовало прочитать документацию.

Цитата Сообщение от belalugoci Посмотреть сообщение
Вы же просто и без затей назвали человека лентяем, я об этом вам и пишу.
То что он - на мой взгляд - поленился открыть документацию, еще не делает его лентяем. Для этого необходимо неоднократно вести себя подобным образом. У меня нет оснований чтобы называть его лентяем и я этого не делал. Это только ваша интерпретация.

Цитата Сообщение от belalugoci Посмотреть сообщение
Для администратора это недопустимо.
А приписывать администратору действия которые он не совершал допустимо?

Цитата Сообщение от belalugoci Посмотреть сообщение
вполне достаточно было написать: "Данное решение доступно при прочтении документации по Encoding.RegisterProvider"
После чего вы или другой человек точно также бы написал (цитирую ваш ответ): "прочитал о методе до вашего ответа, но не нашёл почему решение должно быть именно таким какое вы привели.". Можно было бы пояснить как именно чтение документации могло навести на ответ. Но даже это пояснение вас не устроило.

0
18.09.2024, 13:02

Не по теме:

Цитата Сообщение от OwenGlendower Посмотреть сообщение
После чего вы или другой человек точно также бы написал (цитирую ваш ответ): "прочитал о методе до вашего ответа, но не нашёл почему решение должно быть именно таким какое вы привели."
просто примите как факт, что люди не обязательно ленятся что-то делать, а вам нужно быть сдержаннее в оценках.

0
HF
 Аватар для HF
1316 / 895 / 200
Регистрация: 09.09.2011
Сообщений: 2,687
Записей в блоге: 2
18.09.2024, 13:07
Капец belalugoci зануда.

Например я не читал документации для этого исправления.
Прямо в ошибке написано - "Используете метод..."
Я пошёл и начал его использовать. В параметре не знал что прописать. Методом тыка подобрал CodePagesEncodingProvider, но уверенности не было и просто загуглил (дада... было проще). И оказалось что решение именно такое. Принял как факт и всё.

Я к тому что всё равно в сообщении об ошибке уже было написано что (какой метод) вызывать. Остальное уже даже не требует какого-то навыка "сверх-программиста".
0
18.09.2024, 13:30

Не по теме:

Цитата Сообщение от HF Посмотреть сообщение
Я к тому что всё равно в сообщении об ошибке уже было написано что (какой метод) вызывать. Остальное уже даже не требует какого-то навыка "сверх-программиста".
для вас не требует, я например с Delphi 80% проблем, которые испытываю с C# вообще не имел. И это я в C# постоянно что-то ковыряю и читаю, а могут быть вообще с нулевым опытом общения с языком, это не повод их лентяями называть. Не все люди имеют хорошие способности к программированию, поиску информации, анализу и т.д. Для многих это огромные усилия и труд. И я уверен что есть масса вещей в которых ни вы ни администратор не рубите вообще ничерта, наверное первое что придёт в таком случае на ум, что вы лентяи. Раз-два и лапароскопию сделали, зубной протез вставили прочитав инструкцию - легкотня же.

ФУ быть такими.

0
HF
18.09.2024, 14:09

Не по теме:

Цитата Сообщение от belalugoci Посмотреть сообщение
для вас не требует, я например с Delphi 80% проблем, которые испытываю с C# вообще не имел. И это я в C# постоянно что-то ковыряю и читаю, а могут быть вообще с нулевым опытом общения с языком, это не повод их лентяями называть. Не все люди имеют хорошие способности к программированию, поиску информации, анализу и т.д. Для многих это огромные усилия и труд. И я уверен что есть масса вещей в которых ни вы ни администратор не рубите вообще ничерта, наверное первое что придёт в таком случае на ум, что вы лентяи. Раз-два и лапароскопию сделали, зубной протез вставили прочитав инструкцию - легкотня же.
Вы не передёргивайте с примерами.
На этом форуме эту тему уже неоднократно это обсуждали. Вам постараюсь вкратце пересказать.

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

0
18.09.2024, 14:38

Не по теме:

Цитата Сообщение от HF Посмотреть сообщение
Даже новичок в программировании - это тот кто уже знает что такое язык программирования, что такое IDE
угу, а кто первый раз сексом занимается знает все премудкости, позы и точное положение точки G.
Давайте вы не будете мне рассказывать желаемое, а я вам не буду рассказывать про действительное?

Цитата Сообщение от HF Посмотреть сообщение
как запустить свою первую программу
ну тут явно всё просто

Цитата Сообщение от HF Посмотреть сообщение
и как разбираться в ошибках
ой-ой-ой, вы вообще не понимаете про что пишете

Цитата Сообщение от HF Посмотреть сообщение
Не знать каждую ошибку - а уметь читать и искать информацию
вы же понимаете что это очень крутой скилл, которому учат в ВУЗе? и вы считаете что он просто есть у всех априори? а если я вас ответственно заявлю, что этот скилл отсутствует у большинства закончивших вузы (ну или во всяком случае находится не там уровне как вы себе представляете?)?

Цитата Сообщение от HF Посмотреть сообщение
И потенциальный программист
А чего такая дискриминация других людей? Откуда уверенность что тут объявятся исключительно будущие программисты? Еще в 90-е программирование не было признаком "программистов", а уж сегодня и подавно. Питон так вообще все гоняют кому не лень, я на ютубе ролики одного канадца смотрю, он столяр, как и его отец, что не мешает ему на питоне лабать.

Цитата Сообщение от HF Посмотреть сообщение
Есть разница в таких новичках.
Есть. Поэтому мне и не ясно почему вы здесь всем направо и налево раздаёте готовые решения, а когда, иногда, у вас готовое решение просят, вы начинаете читать нотации и морализировать.
Ну и расскажите где можно про стандарты новичков почитать, так сказать узнать с какими знаниями людей тут обосрут, а с какими по голове поглядят?

0
18.09.2024, 21:18

Не по теме:

Цитата Сообщение от belalugoci Посмотреть сообщение
просто примите как факт, что люди не обязательно ленятся что-то делать, а вам нужно быть сдержаннее в оценках.
Раз мы обмениваемся советами, то вам необходимо принять как факт что я продолжу оценивать действия других людей и писать об этом. Когда считаю нужным и как считаю нужным. Это, разумеется, включает возможность ошибки. Однако в данном случае я не считаю что ошибся.

0
19.09.2024, 09:25

Не по теме:

Цитата Сообщение от OwenGlendower Посмотреть сообщение
я продолжу оценивать действия других людей и писать об этом
ради бога, только делайте это в рамках Правил.
Вы нарушили
3. Правила поведения на форуме.
1. Уважительно относитесь к другим участникам форума.

для Администратора такое нарушение на порядок более сурово наказуемо.

Цитата Сообщение от OwenGlendower Посмотреть сообщение
и как считаю нужным
немного не так - "в соответствии с Правилами форума"

Цитата Сообщение от OwenGlendower Посмотреть сообщение
Это, разумеется, включает возможность ошибки. Однако в данном случае я не считаю что ошибся.
Ну вы назвали незнакомого человека лентяем абсолютно не понимая что человек не обязан иметь те способности которые вы ему приписываете. То есть вы лень оформили как часть определенной модели поведения, которая с вашей точки зрения является какой-то константой, а это заблуждение. А раз вы заблуждаетесь в этом вопросе, то и оскорбление человека вынесено на пустом месте (оскорбление в целом недопустимо и запрещено правилами и за это есть санкции, но когда у вас есть основания вы хотя бы можете сослаться на них, так сказать неправы формально, но правы по сути). Тут же вы нарушили правила и неправы по сути. Вы можете считать что не ошиблись, тот же Элд Хасп например делает это регулярно и ничего, жив здоров. Но я ваше внимание обратил.

В вопросе того что является оскорблением на форуме вообще сложилась странная практика.



 Комментарий администратора 
Прекращаем оффтоп.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.09.2024, 09:25
Помогаю со студенческими работами здесь

Удаление пробелов при чтении CSV
Добрый вечер. Помогите люди добрые , не понимаю в чем проблема. Есть у меня cvs файл , в нем 4 столбца , прочитать мне нужно только...

Изменение кодировки текста при чтении/записи файла txt
Здравствуйте! Код ниже изменяет файл (отбрасывает последний знак в файле "переноса строки" если таковой имеется), но при изменении...

Ошибка кодировки при чтении из файла
При попытке выборки данных по определенным тегам из сохраненного файла при помощи BeautifulSoup, появляется сообщение UnicodeDecodeError:...

Ошибка кодировки при чтении из файла
Добрый день, коллеги! Читаю локальный файл при помощи urllib import urllib file_address="C:/work/stores/4067.html" ...

Сохранение кодировки при чтении XML-файла
Всем привет :) Прошу знающих людей помочь советом, или просто пальцем ткнуть в литературу, только пожалуйста, поподробнее, а то я совсем...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru