Кодировка имени файла
От: BreakHeart  
Дата: 06.11.09 09:38
Оценка:
В программе есть кусок кода, что-то вроде дира.Сталкнулся с такой проблемой. При выводе имени файла, которое содержит какие-нибудь оригинальные символы на забугорном языке эти символы меняются на другие. Поэтому встал такой вопрос как узнать на каком языке написано имя файла чтобы перед выводом на консоль ставить данную кодировку в setlocal
Re: Кодировка имени файла
От: zaufi Земля  
Дата: 06.11.09 12:46
Оценка:
Здравствуйте, BreakHeart, Вы писали:

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


в такой постановке вопроса только с помощью телепатии, могущественной магии ну или накрайняк мощного искуственного интеллекта...
о какой опреационке речь? что за локаль установлена? с какими глючиками смонтирована файловая система на которой находятся проблемные файлики?
Re[2]: Кодировка имени файла
От: BreakHeart  
Дата: 06.11.09 12:54
Оценка:
Здравствуйте, zaufi, Вы писали:

Z>Здравствуйте, BreakHeart, Вы писали:


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


Z>в такой постановке вопроса только с помощью телепатии, могущественной магии ну или накрайняк мощного искуственного интеллекта...

Z>о какой опреационке речь? что за локаль установлена? с какими глючиками смонтирована файловая система на которой находятся проблемные файлики?
ОС — XP
Локаль стоит русская
А вот немецкие символы при выводе на консоль заменяются на похожие по начертанию англицкие
Re[3]: Кодировка имени файла
От: Кодт Россия  
Дата: 06.11.09 13:57
Оценка:
Здравствуйте, BreakHeart, Вы писали:

BH>А вот немецкие символы при выводе на консоль заменяются на похожие по начертанию англицкие


Если пользуешься функциями _findfirst/next/close, то они ещё при вводе заменяются на похожие по начертанию
Я попробовал поиграться с локалями и не смог переубедить чёртову железку Упорно тащит их в кодировке "ANSI".

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

То же самое относится к винапишным функциям: FindFirstFileW против FindFirstFileA (FindFirstFile определён как W или A в зависимости от UNICODE/MBCS).
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Перекуём баги на фичи!
Re[3]: Кодировка имени файла
От: sraider http://dvinogradov.blogspot.com
Дата: 08.11.09 15:19
Оценка:
BH>>>В программе есть кусок кода, что-то вроде дира.Сталкнулся с такой проблемой. При выводе имени файла, которое содержит какие-нибудь оригинальные символы на забугорном языке эти символы меняются на другие. Поэтому встал такой вопрос как узнать на каком языке написано имя файла чтобы перед выводом на консоль ставить данную кодировку в setlocal

Z>>в такой постановке вопроса только с помощью телепатии, могущественной магии ну или накрайняк мощного искуственного интеллекта...

Z>>о какой опреационке речь? что за локаль установлена? с какими глючиками смонтирована файловая система на которой находятся проблемные файлики?
BH>ОС — XP
BH>Локаль стоит русская
BH>А вот немецкие символы при выводе на консоль заменяются на похожие по начертанию англицкие

Имена файлов получаешь и выводишь Unicode? Тогда не устанавливай консоли никакую локаль, а просто:
_setmode(_fileno(stdout), _O_U16TEXT);


Необходимые хидеры:
#include <fcntl.h>
#include <io.h>
#include <stdio.h>
Re[4]: Кодировка имени файла
От: BreakHeart  
Дата: 09.11.09 08:33
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, BreakHeart, Вы писали:


BH>>А вот немецкие символы при выводе на консоль заменяются на похожие по начертанию англицкие


К>Если пользуешься функциями _findfirst/next/close, то они ещё при вводе заменяются на похожие по начертанию

К>Я попробовал поиграться с локалями и не смог переубедить чёртову железку Упорно тащит их в кодировке "ANSI".

К>А вот если _wfind... — то будешь читать юникодные имена файлов без искажений, и дальше встанет лишь вопрос — как вывести юникод в консоль.

К>Ну об этом уже тысяча слов сказана.

К>То же самое относится к винапишным функциям: FindFirstFileW против FindFirstFileA (FindFirstFile определён как W или A в зависимости от UNICODE/MBCS).

Я использую FindFirstW...в переменных нормально усе, но вывод в консоль зависит от локали...вот у меня и появился вопрос какую локаль поставить чтобы все нормально отображалось?ведь выводиться должно не только на немецко, но и на русском и др
Re[4]: Кодировка имени файла
От: BreakHeart  
Дата: 09.11.09 08:38
Оценка:
Здравствуйте, sraider, Вы писали:

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


Z>>>в такой постановке вопроса только с помощью телепатии, могущественной магии ну или накрайняк мощного искуственного интеллекта...

Z>>>о какой опреационке речь? что за локаль установлена? с какими глючиками смонтирована файловая система на которой находятся проблемные файлики?
BH>>ОС — XP
BH>>Локаль стоит русская
BH>>А вот немецкие символы при выводе на консоль заменяются на похожие по начертанию англицкие

S>Имена файлов получаешь и выводишь Unicode? Тогда не устанавливай консоли никакую локаль, а просто:

S>
_setmode(_fileno(stdout), _O_U16TEXT);


S>Необходимые хидеры:
#include <fcntl.h>
S>#include <io.h>
S>#include <stdio.h>

Использую только юникод...но ваш совет не поменял ситуацию...все также меняется на альтернативные англицкие символы(
Re[5]: Кодировка имени файла
От: Кодт Россия  
Дата: 09.11.09 10:19
Оценка:
Здравствуйте, BreakHeart, Вы писали:

BH>Я использую FindFirstW...в переменных нормально усе, но вывод в консоль зависит от локали...вот у меня и появился вопрос какую локаль поставить чтобы все нормально отображалось?ведь выводиться должно не только на немецко, но и на русском и др


Сама по себе консоль виндов — юникодная, и, в принципе, wprintf / wcout тебе помогут.
Только нужно setmode установить, и быть уверенным, что вывод идёт именно в консоль, а не в файл или конвеер — т.е. isatty() возвращает true.
Иначе в выходном файле получится цирк с кодировками.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.