C#: почему символы плохо отображаются в консоли?

Картинка ниже объясняет все:

альтернативный текст http://img133.imageshack.us/img133/4206/accentar9.png

Переменная textInput поступает из File.ReadAllText(path);, а такие символы, как: 'é è ..., не отображаются. Когда я запускаю свой UnitTest, все в порядке! Я их вижу ... Почему?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
0
2 183
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Я не знаю, почему он работает с NUnit, но я открываю файл с помощью NotePad ++ и вижу ANSI в формате. Теперь я перешел на UTF-8, и он работает.

Мне все еще интересно, почему он работал с NUnit, а не в консоли? но, по крайней мере, сейчас это работает.

Обновлять Я не понимаю, почему я проголосовал за этот вопрос и в этом ответе, потому что вопрос все еще хорош, почему в консоли я не могу прочитать файл ANSI, но в NUNit я могу?

Пока вы просто добавляете информацию к исходному вопросу, не добавляйте ответ. Просто отредактируйте исходный вопрос. Это может объяснить некоторые отрицательные голоса.

Tanktalus 18.10.2008 17:49

Я не добавлял информацию, пока меня не проголосовали против. Я нашел некоторую новую информацию для публикации.

Patrick Desjardins 18.10.2008 17:50

Классы .NET (System.IO.StreamReader и подобные) принимают UTF-8 в качестве кодировки по умолчанию. Если вы хотите прочитать другую кодировку, вы должны явно передать это в соответствующую перегрузку конструктора.

Также обратите внимание, что не существует единой кодировки под названием «ANSI». Вы, вероятно, имеете в виду кодовую страницу Windows 1252, известную как «западноевропейская». Обратите внимание, что это отличается от кодировки Windows по умолчанию в других странах. Это актуально, когда вы пытаетесь использовать System.Text.Encoding.Default, потому что на самом деле он отличается от системы к системе.

/ Обновлено: Кажется, вы неправильно поняли мой ответ и мой комментарий:

  1. Проблема в вашем коде заключается в том, что вам нужно указать .NET, какую кодировку вы используете.
  2. Другое замечание о том, что «ANSI» может относиться к кодировкам разные, не имеет никакого отношения к вашей проблеме. Это было просто «кстати» замечание, чтобы предотвратить недоразумения (ну, оно имело неприятные последствия).

Итак, наконец: решением вашей проблемы должен быть следующий код:

string text = System.IO.File.ReadAllText("path", Encoding.GetEncoding(1252));

Важной частью здесь является использование соответствующего экземпляра System.Text.Encoding.

Однако это предполагает, что ваша кодировка действительно является Windows-1252 (но я считаю, что Notepad ++ означает «ANSI»). Я понятия не имею, почему ваш текст отображается правильно при чтении NUnit. Я предполагаю, что NUnit либо имеет какое-то автоматическое обнаружение текстовых кодировок, либо NUnit использует какие-то странные значения по умолчанию (т.е. не UTF-8).

Да, и между прочим: «ANSI» на самом деле относится к «Американскому национальному институту стандартов». Существует множество совершенно разных стандартов, в названиях которых есть «ANSI». Например, C++ (среди прочего) также является стандартом ANSI.

Только в некоторых контекстах он (неточно) используется для обозначения кодировок Windows. Но даже здесь, как я пытался объяснить, это обычно относится не к кодировке специфический, а к классу кодировок, которые Windows использует по умолчанию для разных стран. Одна из них - Windows-1252.

Patrick Desjardins 18.10.2008 17:49

Помимо того, что все эти ссылки относятся к вещам, первое изображение (показывающее Notepad ++) - это просто неточное использование этого слова в контексте. Вероятно, они имеют в виду то же самое, что и кодировка .NET Default, а именно кодовая страница по умолчанию текущей системы, а не одна конкретная кодировка.

Konrad Rudolph 18.10.2008 18:45

Я показываю вам, что Notepad ++ показывает мне, что его не было в UTF8 ... и вы говорите мне, что ANSI не существует, когда он ложен из многих источников. Я провел свое исследование, и я должен вам. Но ты все еще не понимаешь меня? Я не мастер кодирования и должен понимать все, что вы делаете. А

Patrick Desjardins 18.10.2008 18:50

По крайней мере, я пытаюсь решить свою проблему. NUNIT и консольное приложение находятся на ОДНОМ компьютере, поэтому я не понимаю, почему вы сказали мне ответ с системой на систему. Кодировка файла одинакова для обоих, и оба открыты с кодировкой загрузки по умолчанию Net. Итак, ваш ответ не лучше моего

Patrick Desjardins 18.10.2008 18:53

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

Patrick Desjardins 18.10.2008 18:55

Попробуйте установить кодовую страницу вывода консоли с помощью команды chcp. Кодовые страницы, поддерживаемые окнами, - это здесь, здесь и здесь. Помните, что в принципе консоль довольно проста: она отображает символы UNCICODE или DBCS, используя кодовую страницу для определения глифа, который будет отображаться.

Другие вопросы по теме