Please try forcing the Java applet to use Cyrilic: qz.setEncoding("cp1251");
or qz.setEncoding("windows-1251");
unless the printer natively supports UTF-16, then qz.setEncoding("UTF-16");
Update: In newer versions of QZ Tray, the syntax is qz.configs.create("My Printer", { encoding: 'UTF-8' });
Also, make sure to define <meta charset="utf-8">
in your web page.
Edit: There's a detailed explanation of what causes this here: Printer ZebraZ4MPlus don't print Russian Cirillyc character
Java has a habit of assuming what character set you want to use, which is often cp1252 (Windows) or UTF-8 (*nix). Depending on which encoding the printer is expecting (and which encodings it supports), Java first needs to translate these characters/commands to a suitable equivalent before sending. A full list of encodings supported by Java 7 is available here.
A very similar question was posed on the qz bug tracker in regards to Greek character support. The trick was to tell both Java as well as the printer which language/character encoding was being used.
Finally, I've had scenarios where the BOM flag (Byte Order Mark) on the html/js file has caused undesirable results. In that case, JavaScript was aware of the document's encoding and translation was occurring before sending to Java. I use Notepad++ to switch UTF-8 BOM on/off.
In addition, here is the link to the qz bug report, which is in regards to a different printing language (ESCP instead of ZPL), but has a similar symptom of the output from Java getting transposed incorrectly for his printer.
https://code.google.com/p/jzebra/issues/detail?id=204#c10
-Tres