Перейти к содержимому

Фотография

Вопрос - ОтветЗадал вопрос - получил ответ...


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 764

#481
topcraze

topcraze
  • В доску свой
  • 2 009 сообщений

Люди, помогите решить проблему.

чтобы корректно работать с казахскими буквами надо использовать UTF8.. чтобы и файл был UTF8 и читать его так же..


  • 1

#482
Fail

Fail
  • Постоялец
  • 406 сообщений

чтобы корректно работать с казахскими буквами надо использовать UTF8.. чтобы и файл был UTF8 и читать его так же..

файлов уже принято много. Перекодировать их нереально.

Если только не написать программку по пакетной перекодировке.

Спасибо.

Буду думать.


  • 0

#483
Квазимодо

Квазимодо
  • В доску свой
  • 3 230 сообщений

 

чтобы корректно работать с казахскими буквами надо использовать UTF8.. чтобы и файл был UTF8 и читать его так же..

файлов уже принято много. Перекодировать их нереально.

Если только не написать программку по пакетной перекодировке.

 

... или скачать тут.


  • 1

#484
.ctor

.ctor
  • Свой человек
  • 988 сообщений

Люди, помогите решить проблему.
Есть текстовые файлы. 
Notepad++ говорит, что у них кодировка ANSI.
 
В программке (на c#) я считываю содержимое построчно
string[] lines = System.IO.File.ReadAllLines(File,Encoding.GetEncoding(1251));
 
Но при дальнейшей работе с этой строкой казахские символы отображаются некорректно.
 
Не важно записываю ли я в базу или вывожу в MessageBox.

 
 

Как указать кодировку 1251 со специфическими казахскими буквами?

В свое время (98-й, XP) была такая хреновина как 1251k.
Вообщем идея была в том, чтобы заменить часть специфичных буржуйских (редко используемых) символов казахскими. На винду ставилась 1251_k.nls и, ура, мы видим эти символы правильно. Эта таблица представляля собой некую карту для сопоставления ANSI символам их Unicode аналогам.
Вам нужно просто открыв файл в бинарном виде, сделать подмену.
есть второй вариант. В настройке языков выбрать язык поддержи не юникод приложений с русского на казахский.
locales.jpg?gl=RU
Если повезет и файлы были записаны в подходящем формате, все отразится правильно при открытии анси.

Сообщение отредактировал .ctor: 15.08.2014, 17:00:10

  • 0

#485
.ctor

.ctor
  • Свой человек
  • 988 сообщений

чтобы корректно работать с казахскими буквами надо использовать UTF8.. чтобы и файл был UTF8 и читать его так же..

Не обязатально. Винда с utf8, utf16 и т.п. не работает. работает она только с юникодом. Все остальное конвертируется в юникод при чтении и выводе.
  • 0

#486
topcraze

topcraze
  • В доску свой
  • 2 009 сообщений

Не обязатально. Винда с utf8, utf16 и т.п. не работает. работает она только с юникодом. Все остальное конвертируется в юникод при чтении и выводе.

вообще не поняла, что вы имеете в виду

поясните, плиз?

 

юникод - это стандарт

utf-8 и utf-16(а также другие, менее распространенные) - это кодировки, разработанные по стандарту UNICODE

мало того, я вам больше скажу :) - имена файлов хранятся в семействе NT именно в utf-16..


  • 0

#487
.ctor

.ctor
  • Свой человек
  • 988 сообщений

вообще не поняла, что вы имеете в виду
поясните, плиз?
 
юникод - это стандарт
utf-8 и utf-16(а также другие, менее распространенные) - это кодировки, разработанные по стандарту UNICODE
мало того, я вам больше скажу :) - имена файлов хранятся в семействе NT именно в utf-16..

 
UTF-8 (от англ. Unicode Transformation Format, 8-bit — «формат преобразования Юникода, 8-битный») — одна из общепринятых и стандартизированных кодировок текста, которая позволяет хранить символы Unicode. ©wiki
 
чтобы работать с казахским не обязательно использовать UTF-8, вот что я хотел сказать. Все эти кодировки это только способ преобразования символов для последующего отображения и сравнения между собой.
 
про имена файлов:
 

NTFS stores file names in Unicode. In contrast, the older FAT12, FAT16, and FAT32 file systems use the OEM character set. For more information, see Code Pages.

 
взято отсюда, MSDN
NT может сидеть как на NTFS, так и на Fat32 (не знаю точно про семейство выше XP, XP точно может)

Сообщение отредактировал .ctor: 15.08.2014, 17:31:54

  • 0

#488
.ctor

.ctor
  • Свой человек
  • 988 сообщений
небольшая поправка)

В API Win32, распространённом в современных версиях операционной системы Microsoft Windows, имеется два способа представления текста: в форме традиционных 8-битных кодовых страниц и в виде UTF-16.

В файловых системах NTFS, а также FAT с поддержкой длинных имён, имена файлов записываются в UTF-16LE.

©wiki

Сообщение отредактировал .ctor: 15.08.2014, 17:35:40

  • 0

#489
topcraze

topcraze
  • В доску свой
  • 2 009 сообщений

©wiki

ну, и я об этом же..

взято отсюда, MSDN NT может сидеть как на NTFS, так и на Fat32 (не знаю точно про семейство выше XP, XP точно может)

в чем взятое утверждение противоречит тому, что я сказала? :)

чтобы работать с казахским не обязательно использовать UTF-8, вот что я хотел сказать. Все эти кодировки это только способ преобразования символов для последующего отображения и сравнения между собой.

не обязательно

можно и utf-16, и другие юникод-кодировки, согласна

но на практике, с utf-8  меньше всего проблем ))

 

 

про ср1251каз.. теоретически, можно

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

впрочем, если я что-то тут путаю или недопонимаю, прошу поправить..


  • 0

#490
.ctor

.ctor
  • Свой человек
  • 988 сообщений

в чем взятое утверждение противоречит тому, что я сказала? :)

There is another way!)
 

не обязательно
можно и utf-16, и другие юникод-кодировки, согласна
но на практике, с utf-8  меньше всего проблем ))

У человека есть определенная проблема, и ее надо решить)
мало того, у меня на работе до сих пор каз символы хранятся в ANSI, т.к. база не Unicode. Все прекрасно дружит, и занимает мало места)
 

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

Тот самый другой путь. Распространение требовалось на XP, на более новых ОС это уже изобретено до нас.
Я картинку высылал. Вообщем в некоторых случаях можно обойтись малой кровью)
  • 0

#491
.ctor

.ctor
  • Свой человек
  • 988 сообщений

И да, 1251каз (codepage) это не кодировка, а сопоставление символов ANSI (8байт) матрице Unicode символов.
Где часть символов просто ссылается на казахские, а не на спецсимволы, редко используемые.

существует для разных языков, включая русский. 


Сообщение отредактировал .ctor: 15.08.2014, 17:58:32

  • 0

#492
topcraze

topcraze
  • В доску свой
  • 2 009 сообщений
У человека есть определенная проблема, и ее надо решить)

да, надо ))

вопрос еще, сможет ли .NET подтянуть  cp1251k? Хотя! Можно же юзать P/Invoke и через WinAPI сделать все.. 

 

 

 

мало того, у меня на работе до сих пор каз символы хранятся в ANSI, т.к. база не Unicode. Все прекрасно дружит, и занимает мало места)

если оно никуда не ходит и не планирует, то почему бы и нет? 

 

 

 

Распространение требовалось на XP, на более новых ОС это уже изобретено до нас.

и хранится в кодировках юникод!  

 

 

 

И да, 1251каз это не кодировка, а сопоставление символов ANSI (8байт) матрице Unicode символов.

при всем уважении :)

cp2151kaz  - это разновидность кодировки cp1251..и она к юникоду не имеет никакого отношения


Сообщение отредактировал topcraze: 15.08.2014, 18:12:05

  • 0

#493
.ctor

.ctor
  • Свой человек
  • 988 сообщений

при всем уважении :)
cp2151kaz  - это разновидность кодировки cp1251..и она к юникоду не имеет никакого отношения

А я чего написал? О_о
https://ru.wikipedia...одовая_страница

Сообщение отредактировал .ctor: 15.08.2014, 18:27:51

  • 0

#494
.ctor

.ctor
  • Свой человек
  • 988 сообщений

да, надо ))
Хотя! Можно же юзать P/Invoke и через WinAPI сделать все..


ОМГ, вы говорите очень страшные вещи)) Все вразы проще.

Сообщение отредактировал .ctor: 15.08.2014, 18:29:07

  • 0

#495
.ctor

.ctor
  • Свой человек
  • 988 сообщений

и хранится в кодировках юникод!


тут я вообще не понял мысль) что хранится?
  • 0

#496
.ctor

.ctor
  • Свой человек
  • 988 сообщений
Можно нескромный вопрос девушке?))) Вы на чем пишете или писали?
  • 0

#497
topcraze

topcraze
  • В доску свой
  • 2 009 сообщений
ОМГ, вы говорите очень страшные вещи)) Все вразы проше.

покажите простой путь :)

на примере кода вопрошающего ))

 

 

 

тут я вообще не понял мысль) что хранится?

:D казсимволы в старших виндах хранятся в юникоде (utf16)

 

 

 

А я чего написал? О_о

вы написали, что cp1251k -   это не кодировка, а сопоставление символов ANSI (8байт) матрице Unicode символов.©

 

так вот

1) cp1251k - это кодировка

2) она не сопоставляется символам Unicode, а символам национальных таблиц. Если хотите доказать обратное, покажите, плиз, код китайского символа в кодировке cp1251

 

 

Можно нескромный вопрос девушке?))) Вы на чем пишете или писали?

c++, с#

пишу


Сообщение отредактировал topcraze: 15.08.2014, 18:42:39

  • 0

#498
.ctor

.ctor
  • Свой человек
  • 988 сообщений

покажите простой путь :)
на примере кода вопрошающего ))

Мне бы файлик посмотреть для примера.
 

:D казсимволы в старших виндах хранятся в юникоде (utf16)

А на диске они в чем хранятся? Вот пользователь говорит что нифига не в юникоде. 
 
 

вы написали, что cp1251k -   [/size]
это не кодировка, а сопоставление символов ANSI (8байт) матрице Unicode символов.©[/size]
 
так вот
1) cp1251k - это кодировка
2) она не сопоставляется символам Unicode, а символам национальных таблиц. Если хотите доказать обратное, покажите, плиз, код китайского символа в кодировке cp1251

ок. Вот у вас диапазон от 0 до 255. В нем нужно хранить эпическое количество символов > 256 (для разных языков и систем DOS, Mac, Win) 
есть фонты, которые имеют диапазон в от 0..ffff, например. Как сделать возможность отобразить текст на русском и скажем корейском языках (не берем иероглифы китайские, с ними все совсекм грустно) и сделать это в 1 байте. Одновременно языки не встречаются. Что бы вы сделали?
 


c++, с#
пишу

Низкий поклон) развелось адинэсников)

Сообщение отредактировал .ctor: 15.08.2014, 18:54:42

  • 0

#499
topcraze

topcraze
  • В доску свой
  • 2 009 сообщений

Мне бы файлик посмотреть для примера.

подождем, может вопрошающий появится и покажет ))

А на диске они в чем хранятся? Вот пользователь говорит что нифига не в юникоде. 

Имена файлов на диске - в юникоде.. содержимое файлов в той кодировке, в которой угодно пользователю

Что бы вы сделали?

придумала бы юникод :D

а если серьезно, то значение 0xFFFF не влезет в байт, как ни крути ))

да и cp1251 - это исключительно кириллическая кодировка, а корейский уже не при чем

в разных кириллицах(например, каз, рус и какая-нидь болгарская(у них есть спецбуквы?)) - в специфичных cp1251 заменяются разные спецсимволы на национальные буквы.. и все, суть идеи совсем не сложна: один язык - одна таблица.. проблемы начинаются тогда, когда хочется все языки впихнуть в одну таблицу и не париться  с тем, прочтут ли пользователи в Болгарии нашу казахскую cp1251, не имея ее установленной в системе ))

а еще большие проблемы появляются, когда на сцену выходят китайцы :D и 8 байт становится мало

Низкий поклон) развелось адинэсников)

спасибо ))

и вам.. судя по подписи 


  • 0

#500
.ctor

.ctor
  • Свой человек
  • 988 сообщений

придумала бы юникод :D
а если серьезно, то значение 0xFFFF не влезет в байт, как ни крути ))
да и cp1251 - это исключительно кириллическая кодировка, а корейский уже не при чем
в разных кириллицах(например, каз, рус и какая-нидь болгарская(у них есть спецбуквы?)) - в специфичных cp1251 заменяются разные спецсимволы на национальные буквы.. и все, суть идеи совсем не сложна: один язык - одна таблица.. проблемы начинаются тогда, когда хочется все языки впихнуть в одну таблицу и не париться  с тем, прочтут ли пользователи в Болгарии нашу казахскую cp1251, не имея ее установленной в системе ))
а еще большие проблемы появляются, когда на сцену выходят китайцы :D и 8 байт становится мало


Воот. На правильном направлении мыслите вы. Собственно этим и занимается кодовая страница. Это некая карта, которая указывает соответствие каждому байту его позицию в большом массиве (шрифты например или Юникод соответствующее значение). Поменяв карту (с 1251 на 1251каз, например) мы имеете отличия в 22 символа, которые будут ссылаться на казахский алфавит, а не на спецсимволы.
Дальше, пользователь нужно сделать что-то подобное, заменить байт на 2 соответсвующих правельным символам каз.алфавита, иначе конвертация пойдет по таблице 1251. locales.jpg?gl=RU
тут это настраивается стандартными средствами винды. Если повезет, и у пользователя файлы в правильном соответствии со стандартной кодировкой, то мы получим верный текст. Если нет, то сделать простым алгоритмом подмены в массиве символов. Дальше, получив нормальный юникод текс в .net, сохраняйте его как надо.
Вот вам карта 1251

Кодировки же (например UTF-8, KOI8-R) это стандарты преобразования, которые позволятет обойти стандартную кодовую страницу в вашей системе и описывает точное соответствие 2-х байтовому юникод-символу. Полезны они в интернетах, т.к. позволяют часть текста (английский, пробелы, цифры и спецсимволы) передавать в 1 байт, а все остальное 2-мя, 3-мя и т.д. имеем экономию трафика. Тут не используются спецсиволы (к примеру ACK, NAK, EOF, EOL и т.п. для передачи текста)
  • 0


Количество пользователей, читающих эту тему: 2

пользователей: 0, неизвестных прохожих: 1, скрытых пользователей: 0


    Bing (1)

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

© 2011-2022 vse.kz. При любом использовании материалов Форума ссылка на vse.kz обязательна.