Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
0 / 0 / 1
Регистрация: 25.06.2017
Сообщений: 69
.NET 4.x

Неправильная кодировка для текстового файла

18.02.2019, 07:52. Показов 3752. Ответов 11

Студворк — интернет-сервис помощи студентам
Приветствую всех интересующихся,

Пытаюсь сохранить текстовый файл в конкретной кодировке x-mac-cyrillic, но видимо делаю что-то не так, потому что сохраняется в чём-то совсем другом:

C#
1
2
3
4
                FileStream fs = new FileStream(@"z:\1.txt", FileMode.Create, FileAccess.Write);
                byte[] bt = Encoding.GetEncoding(10007).GetBytes("ёлка");
                fs.Write(bt, 0, bt.Length);
                fs.Close();
Вместо цифровой кодировки 10007 пробовал писать её имя "x-mac-cyrillic", но на выходе всё равно получается файл в странной кодировке ISO-8859-7. В чём может быть дело?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.02.2019, 07:52
Ответы с готовыми решениями:

Неправильная кодировка при считывании кирилицы из текстового файла
У меня есть код для считывания текста из файла... если в файле русский язык то он выдает непонятные символы... Объясните пожалуйста что не...

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

Кодировка текстового файла
при загрузке текстового файла вместо русских слов знаки вопроса OpenFileDialog ofg = new OpenFileDialog(); ofg.Filter =...

11
 Аватар для EveKS
601 / 485 / 185
Регистрация: 19.04.2016
Сообщений: 1,885
18.02.2019, 08:35
Надо не конвертировать в кодировку, а записывать в ней
Первая строка поисковика выдала 2 таких варианта:
C#
1
2
3
4
using (var tw = new StreamWriter(DownloadedFilePath, false, Encoding.UTF8))
 
var sw = new StreamWriter( new FileStream(DownloadedFilePath, FileMode.Create),
    Encoding.UTF8);
Думаю, не нужно объяснять как из этого сделать нужное
0
0 / 0 / 1
Регистрация: 25.06.2017
Сообщений: 69
18.02.2019, 09:44  [ТС]
Нет, видимо я не понял, где у меня происходит перекодирование. Encoding.GetEncoding(10007) — здесь? Так у Microsoft написано, что Encoding.GetEncoding() - это метод для получения других кодировок. Вот я и указываю её напрямую.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
18.02.2019, 10:02
Цитата Сообщение от EveKS Посмотреть сообщение
Надо не конвертировать в кодировку, а записывать в ней
Те же яйца, только в профиль.
В вашем варианте это делает StreamWriter, в варианте автора это делает он сам.

Цитата Сообщение от Alexandrus2017 Посмотреть сообщение
на выходе всё равно получается файл в странной кодировке ISO-8859-7.
Как вы это определили?
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
18.02.2019, 10:11
Цитата Сообщение от Alexandrus2017 Посмотреть сообщение
Пытаюсь сохранить текстовый файл в конкретной кодировке x-mac-cyrillic, но видимо делаю что-то не так, потому что сохраняется в чём-то совсем другом:
С чего вы взяли, что кодировка не та?
Я взял ваш код, смотрю файл, кодировка совпадает с MacCyrillic.
Вот слово ёлка в файле (в hex):

Смотрим в табличку, буква ё - код DE, совпадает с файлом. Все ок.
0
0 / 0 / 1
Регистрация: 25.06.2017
Сообщений: 69
18.02.2019, 14:25  [ТС]
Определяю при помощи UDE.CSharp.1.1.0. Но похоже именно он и выдаёт фигню, только сейчас заметил.

C#
1
2
3
4
5
6
7
8
public string GetEncoding(string filePath)
        {
            FileStream fs = File.OpenRead(filePath);
            Ude.CharsetDetector cdet = new Ude.CharsetDetector();
            cdet.Feed(fs);
            cdet.DataEnd();
            return cdet.Charset;
        }
Испытуемый файл создавался в другой программе. Странно здесь вот что. Пока файл был пустой, метод показывал кодировку "windows-1251", Как только начал заполнять файл текстом уже из своей программы, как вдруг вылезла кодировка "x-mac-cyrillic", ну а какую кодировку этот метод показывает при создании файла при помощи "яиц в анфас и в профиль" мы видели в посте №1. Похоже что метод определения кодировки просто не работает как должен, а жаль.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
18.02.2019, 15:04
Цитата Сообщение от Alexandrus2017 Посмотреть сообщение
Похоже что метод определения кодировки просто не работает как должен, а жаль.
Нет идеальных способов определить кодировку.
Пустой файл — он в какой кодировке, например?
А файл, полностью состоящий из символов английского алфавита?
А бинарный файл?

Можно только догадываться с различной степенью уверенности, опираясь на "изюминки" различных кодировок.
0
0 / 0 / 1
Регистрация: 25.06.2017
Сообщений: 69
19.02.2019, 04:27  [ТС]
А есть ли какой ещё класс, который догадывается о текстовой кодировке надёжнее Ude?
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
19.02.2019, 10:37
Цитата Сообщение от Alexandrus2017 Посмотреть сообщение
А есть ли какой ещё класс, который догадывается о текстовой кодировке надёжнее Ude?
Понятия не имею.
А почему бы не писать файлы в юникоде? Сразу отпадут проблемы.
Или вы работаете с какой-то древней программой, которая понимает файлы только в древней кодировке?
0
0 / 0 / 1
Регистрация: 25.06.2017
Сообщений: 69
19.02.2019, 11:09  [ТС]
Нет, та древняя программа - просто частный случай. Мне всегда было интересно, как можно определить кодировку текстового файла программным методом.
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
19.02.2019, 11:45
Цитата Сообщение от Alexandrus2017 Посмотреть сообщение
Мне всегда было интересно, как можно определить кодировку текстового файла программным методом.
У используемой вами библиотеки открытый код.
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
19.02.2019, 11:48
Цитата Сообщение от Alexandrus2017 Посмотреть сообщение
Нет, та древняя программа - просто частный случай. Мне всегда было интересно, как можно определить кодировку текстового файла программным методом.
Никак. Только статистическим или эвристическим методами. То есть приблизительно.
Исключение - кодировки семейства Unicode, который используют BOM.

Добавлено через 15 секунд
Цитата Сообщение от Alexandrus2017 Посмотреть сообщение
Нет, та древняя программа - просто частный случай. Мне всегда было интересно, как можно определить кодировку текстового файла программным методом.
Никак. Только статистическим или эвристическим методами. То есть приблизительно.
Исключение - кодировки семейства Unicode, который используют BOM.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.02.2019, 11:48
Помогаю со студенческими работами здесь

Кодировка строк из текстового файла
Доброго времени суток. У меня вопрос по кодировке. Подобную тему видел, но в ней работа с БД. У меня же проблема со строками из текстового...

Неверная кодировка при чтении из текстового файла (Encoding не работает)
Есть программа, которая должна выводить фамилии (выбранные по определенному критерию) в файл: //метод сравнения двух матриц static...

Кодировка текстового файла
Есть 2 окна. В 1 отобрражаетса текстовый файл открытый через OpenDialog. Во 2 при нажатии кнопки происходит блочное шифроввание текста с 1...

Неправильная кодировка при чтении из файла
Всем привет, подскажите плз, как считать с файла русские символы? Прописываю такой код: System::Text::Encoding::GetEncoding(1251) Но...

Неправильная кодировка при чтении файла
В файле (utf-8) строка - Qwsadser tzui opopü päö lklkj fdgknsdayx cxbc vnbvn vcbcv sdfgdf; Файл читает код: $src = fopen($file_name,...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
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-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru