NavyaKrishna51 Ответов: 2

Специальные символы преобразуются в "?" при импорте из CSV


Привет,

Я столкнулся с проблемой при импорте специальных символов из листа excel.

Специальные символы включают в себя (¡¢£¤ ¥/¦©ª "«°±23μ ¶ *1º " »àáâããåæçèéëìíîïðñòóôõö × øùúüýþßàáâãåæçèéëìíîïðñòóôö ÷ øùúüüýþ)


Я использую streamreader для импорта этого текста, и ни один параметр не передается в streamreader, поэтому по умолчанию используется UTF-8.
После импорта специальный Чатер отображается как "?".
Где Кодировка.По умолчанию передается в качестве параметра streamreader специальный устав, отображающий свойства.


Но я наткнулся на этот пост msdn, в котором говорится о кодировке.Глухоту использовать не рекомендуется.

https://msdn.microsoft.com/en-us/library/system.text.encoding.default(v=против 110).aspx

Делает Кодирование.Значение по умолчанию может измениться в 2 разных системах и будет ли оно обрабатывать специальные символы из другого языка?

Мой код выглядит примерно так:

FileStream fs = новый fileStream(sFileName,FileMode.Открой,FileAccess.Читай,Файлообменник.Чтение и запись);
StreamReader sw = новый StreamReader(fs);
Строка sbuf = sw.ReadLine();

Когда я читаю csv-файл, содержащий вышеупомянутые специальные символы, значение sbuf отображается как ?

Он прекрасно работает, когда я использую Streamreader, как это.
StreamReader sw = новый StreamReader(fs,кодировка.По умолчанию);

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

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


Может ли кто-нибудь поделиться своими мыслями по этому поводу?

Richard MacCutchan

Я подозреваю, что символы вообще не изменяются, но ваши приложения не используют шрифт, необходимый для их отображения.

NavyaKrishna51

Привет Ричард,
Можете ли вы предложить тип кодировки, который мне нужно использовать для отображения специальных символов

Richard MacCutchan

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

Sergey Alexandrovich Kryukov

- Нет, Ричард.
При неправильном шрифте он будет показывать поле для непечатаемого символа. '?' указывает на то, что некоторые символы, закодированные в Юникоде, пытались интерпретировать как не-Юникод, и в момент возврата к Юникоду фактические символьные данные уже были потеряны. Пожалуйста, смотрите решение 1.
—СА

Richard Deeming

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

NavyaKrishna51

Кодирование.По умолчанию возвращается кодовая страница 1252.
Если я явно использую 1252, то как насчет символов из разных кодовых страниц?

2 Ответов

Рейтинг:
2

Sergey Alexandrovich Kryukov

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

Теперь забудьте всю "дефолтную" чепуху и узнайте, какова реальная кодировка текстового файла, который Вы читаете. В некоторых (многих) случаях кодировок на основе Unicode (UTFs) текстовый файл может иметь спецификацию, указывающую, что это такое. Затем текстовые редакторы скажут вам, что это такое на "Сохранить как". Пожалуйста смотрите: http://unicode.org/faq/utf_bom.html[^].

Однако что делать, если нет спецификации или кодировка не является Unicode? Мое "секретное оружие" - это любой хороший веб-браузер. Переименуйте входной файл в *.HTML и откройте его. Если он не читается, используйте меню View / Character Encoding Вашего браузера, чтобы быстро найти правильный вариант.

А затем используйте правильную кодировку при создании экземпляра StreamReader:
https://msdn.microsoft.com/en-us/library/system.io.streamreader.streamreader%28v=vs.110%29.aspx[^] (выберите один с Encoding аргумент),
https://msdn.microsoft.com/en-us/library/system.text.encoding%28v=vs.110%29.aspx[^].

Вот так просто.

—СА


Рейтинг:
0

Vijay Walunj,Navi mumbai

Используйте приведенный ниже код

text=Regex.Replace(ячейка.Текст, @"[^\u0020-\u007E]", строка.Пустой);

Вам нужно добавить пространство имен
Системы.Текст.RegularExpressions;