21 Востаннє редагувалося ReAl (27.12.2017 21:51:04)

Re: phantomjs виводить крякозябри замість української мови

FakiNyan написав:

Хай. Завантажую через phantomjs сторінку і парсю через jquery, виводячи деякі значення, з латинкою працює нормально, а от чудову українську не виводе, замість неї виводе ось таке

╨Я╨░╨▓╨╗╨╛ ╨Ч╤Ц╨▒╤А╨╛╨▓

Я пробував запускати з опцією

--output-encoding=utf8

та воно не допомогло.
Як то похвіксити?

Судячи з вигляду, консоль взагалі в CP866.

FakiNyan написав:

вирішив записати дані в файл, то все нормально відображається.

Отожбо.
Саме тому в одній консольній програмі, в її win-варіанті, у мене (то C++, а чи можна достукатися з того  phantomjs до рідно-віндової CharToOem, яка знає про те, в яку кодову сторінку встановлено консоль,  не знаю)

    if (stdout_tty)
        CharToOem(buf, buf);

А вже stdout_tty то булевське поле у класі, яке при запуску програми ініціалізується так

console_t::console_t()
    : stdout_tty(isatty(fileno(stdout)))
    , stderr_tty(isatty(fileno(stderr)))
    , log_level(info)

В результаті якщо програма запускається без перенаправлення вводу-виводу, то воно лупить в консольному кодуванні, якщо ж перенаправлено у файл (або перехоплено оболонкою, яка запускає програму), то у загальновіндовому.

Подякували: bunyk1

22

Re: phantomjs виводить крякозябри замість української мови

ніфіга не поняв, я встановлював різне кодування для консолі, вид крякозябрів змінювався, але української не видно було

23 Востаннє редагувалося ReAl (27.12.2017 23:04:09)

Re: phantomjs виводить крякозябри замість української мови

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

Після того, як я так зробив (через WinAPI), всі проблеми пропали, кирилиця почала показуватися нормально у всіх коистувачів.

24

Re: phantomjs виводить крякозябри замість української мови

тепер пойняв, але мені ліньки якось поки що

25

Re: phantomjs виводить крякозябри замість української мови

p.s. І ще одна WIN-консольна радість — те, що у командному рядку програми набирається в консолі і в ній виглядає нормально, потрапляє на обробку (argv в main) вже перекодованим з консольного кодування у встановлене в WIN кодування. Просто тому, що це може бути GUI-програма з можливістю взяти аргументи.
І якщо просто надрукувати свої аргументи, то буде сміття. А от якщо програма просить щось набрати, то воно передається у програму як є, без перекодування з консольного у «головне».

win-програма, яка друкує свої аргументи написав:

D:\temp>foo йцукен ЙЦУКЕН
'щЎєъхэ'
'╔╓╙╩┼═'
Now, enter string:
шщзхїШЩЗХЇ
'шщзхїШЩЗХЇ'

Подякували: leofun011

26

Re: phantomjs виводить крякозябри замість української мови

тре було на початку коду ось це зробити

phantom.outputEncoding="cp1251";

і перевести консолю в це ж кодування

Подякували: /KIT\, 0xDADA11C7, 221VOLT3

27

Re: phantomjs виводить крякозябри замість української мови

cp/win1251/latin1 -- "непотріб" !!
даєш тотальний великий і єдиний utf8 !!

Подякували: 0xDADA11C71

28

Re: phantomjs виводить крякозябри замість української мови

utf8 не робе

Подякували: 0xDADA11C71

29

Re: phantomjs виводить крякозябри замість української мови

хтось щось таке робе, що utf8 не робе  :D

30

Re: phantomjs виводить крякозябри замість української мови

Трусік послуговується віндою, тому страждає.

Подякували: 221VOLT1

31

Re: phantomjs виводить крякозябри замість української мови

на вінді то все важче робити, одже я кращий кодер (▀̿Ĺ̯▀̿ ̿)

32

Re: phantomjs виводить крякозябри замість української мови

то якісь фантомні болі кракозябри самоствердження ))

Подякували: 0xDADA11C71