|
Кодовая страница выходного потока
|
|||
---|---|---|---|
#18+
Доброго времени суток. Программно читаю содержимое выходного потока, от созданного мною процесса. Получаю кракозяблы вместо кирилицы. Нужно как-то автоматом определять нужную кодировку. Операционная система и приложение, создавшее выше указанный процесс, могут иметь различную локализацию (т.е. Windows Enu\Rus и AutoCAD Enu\Rus). Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28.
На выходе получаю такой текст: outputTextrecovery; (c) Andrey Bushman, 2013 ЋЎа Ў®вЄ Є в «®Ј "%acad_R17.2%". ќ«Ґ¬Ґв: AutoCAD 2009/; –Ґ«Ґў®© Є в «®Ј: C:\Program Files\Autodesk; ЋиЁЎЄ : ЋвЄ § ® ў ¤®бвгЇҐ Ї® ЇгвЁ "acad.CUI". ЋЎа Ў®вЄ Є в «®Ј "%rmb_acad_R17.2%". ЋЎа Ў®вЄ Є в «®Ј "%local_acad_R17.2%". ЋЎа Ў®вЄ Є в «®Ј "%allUsers_acad_R17.2%". ЋЎа Ў®вЄ Є в «®Ј "%shared_acad_R17.2%". ќ«Ґ¬Ґв: Autodesk Shared/; –Ґ«Ґў®© Є в «®Ј: C:\Program Files\Common Files; ЋиЁЎЄ : ЋвЄ § ® ў ¤®бвгЇҐ Ї® ЇгвЁ "C:\Program Files\Common Files\Autodesk Shared\". ЋЎа Ў®вЄ Є в «®Ј "%ext_acad_R17.2%". Если перенаправление не выполнять, то в самой консоли Windows текст отображается корректно. С уважением, Андрей ____________ Британские "учёные" - фундаментальный подход к разной фигне... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 15:15 |
|
Кодовая страница выходного потока
|
|||
---|---|---|---|
#18+
В общем, методом перебора всех имеющихся кодировок определил нужную: cp866. Читал из потока вместо текста байты и преобразовывал их в текст кодировок, проверяя в отладчике содержимое. Тестовый код был таким: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42.
Пока что в коде жёстко пропишу кодировку cp866, но если кто подскажет вариант автоматического определения нужной - буду признателен. С уважением, Андрей. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 16:47 |
|
Кодовая страница выходного потока
|
|||
---|---|---|---|
#18+
Нашёл два варианта решения, оба работают: 1. GetOEMCP 2. CultureInfo.CurrentCulture.TextInfo.OEMCodePage Мало ли, может ещё кому пригодится. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 17:15 |
|
Кодовая страница выходного потока
|
|||
---|---|---|---|
#18+
Compositumно если кто подскажет вариант автоматического определения нужной Автоматическое определение, что надо перекодировать из 866 Код: c# 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 19:57 |
|
Кодовая страница выходного потока
|
|||
---|---|---|---|
#18+
@ Cat2 И что это даст? Кроме того, я ведь выше уже показал два "родных" способа решения. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 20:02 |
|
Кодовая страница выходного потока
|
|||
---|---|---|---|
#18+
CompositumИ что это даст? Быстрее. Оба описанных выше способа лезут в реестр ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 20:59 |
|
Кодовая страница выходного потока
|
|||
---|---|---|---|
#18+
Cat2Быстрее. Честно говоря, я не понял этого кода.... Что именно будет быстрее? Вы сравнили текст с указанным некоторым паттерном, а как это поможет кодировку узнать? Предположим, что IsMatch возвратит false, что тогда? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2013, 21:09 |
|
Кодовая страница выходного потока
|
|||
---|---|---|---|
#18+
CompositumНашёл два варианта решения, оба работают: 1. GetOEMCP 2. CultureInfo.CurrentCulture.TextInfo.OEMCodePage Мало ли, может ещё кому пригодится. А я не понял, в чем суть проблемы, и в чем смысл предложенного решения. Не знали, какая кодировка используется в консоли на windows с локалью 1049? Просто запомните - это cp866. А предложенные решения просто вернут OEM-кодировку в текущем окружении, не более. И в определении кодировки содержимого любого другого потока, отличного от консольного, они не помогут. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2013, 03:41 |
|
|
start [/forum/topic.php?fid=20&msg=38191532&tid=1404989]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
others: | 310ms |
total: | 436ms |
0 / 0 |