Невозможно напечатать русские символы

У меня есть русская строка, которую я закодировал в UTF-8.

String str = "\u041E\u041A";
System.out.println("String str : " + str);

Когда я печатаю строку в консоли eclipse, я получаю ?? Может ли кто-нибудь предложить, как напечатать русские строки в консоли или что я здесь делаю неправильно?

Я попытался преобразовать его в байты, используя byte myArr[] = str.getBytes("UTF-8"), а затем new String(myArr, "UTF-8") все та же проблема :-(


person Rohit    schedule 18.06.2013    source источник
comment
ссылка Похоже на вашу проблему...   -  person XapaJIaMnu    schedule 18.06.2013
comment
Перейдите в «Выполнить» > «Выполнить конфигурацию» > «Общие» > «Измените кодировку консоли на UTF-8».   -  person Shashank Kadne    schedule 18.06.2013


Ответы (7)


Попробуй это:

String myString = "some cyrillic text";
byte bytes[] = myString.getBytes("ISO-8859-1"); 
String value = new String(bytes, "UTF-8"); 

Или это:

String myString = "some cyrillic text";
byte bytes[] = myString.getBytes("UTF-8"); 
String value = new String(bytes, "UTF-8"); 

Основная проблема с русским языком это правильно установить кодировку UTF-8.

person Lugaru    schedule 18.06.2013

В eclipse выберите «Выполнить» > «Конфигурация запуска» > «Общие» > «Измените кодировку консоли на UTF-8». Вы сможете увидеть русские символы в консоли

person Ankit Pandoh    schedule 20.07.2015

Мой Eclipse печатает правильно

String str : ОК

попробуйте изменить кодировку Run Configurations на UTF-8 или CP1251

person Evgeniy Dorofeev    schedule 18.06.2013

Экранный шрифт консоли, скорее всего, не справится с символами, отличными от ASCII.

Вы можете попробовать печатать в файл, а не в System.out

person Java Devil    schedule 18.06.2013

У меня такая же проблема, когда я читаю файл MyFile.txt с русскими буквами. Может кому поможет. Решение:

package j;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class J4 {
public static void Read_TXT_File(String fileName) throws 
FileNotFoundException {
try{int i=0;

Scanner scanner = new Scanner(new File(fileName), "utf-8");
while (scanner.hasNext()) {
String line = scanner.nextLine();

//byte bytes[] = line.getBytes("UTF-8"); 
//line = new String(bytes, "UTF-8"); 
if (line.isEmpty()) {
System.out.println(i+": Empty line");
}
else {
System.out.println(i+": "+ line);
// here is your code for example String MyString = line
}
i++;
}
}catch(Exception ex){ex.printStackTrace();}
}

public static void main(String[] args) throws 
FileNotFoundException {
Read_TXT_File("MyFile.txt");
}
}
person Arthur Alunts    schedule 01.07.2021

В XCode вы можете печатать значения функцией LLDB po [SomeClass returnAnObject] Для автоматической работы ее можно добавить в какое-то действие в точке останова. Также вам нужно добавить флажок «Автоматическое продолжение после действий eval».

пример

person Dryagin    schedule 30.01.2019

Это старая тема, но, тем не менее, возможно, ниже кому-то поможет.

Если вы читаете данные с помощью InputStream / InputStreamReader (например, из какого-то API), которые содержат символы кириллицы, и вы получаете какую-то тарабарщину вроде ������ ��� или ?????? ???, попробуйте применить кодировку Charset в качестве второго параметра конструктора InputStreamReader.

ПРИМЕР:

Давайте воспользуемся API ЦБ России, чтобы получить цену доллара США и евро в российских рублях. В приведенном ниже коде мы получаем данные за текущий день, когда делаем запрос. Данные из API находятся в xml, поэтому нам также нужно их проанализировать.

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.Charset;

public class CBRFApi {

    public static void main(String[] args) throws UnsupportedEncodingException {

        String output = getAndReadData("http://www.cbr.ru/scripts/XML_daily.asp");
        Document document = loadXMLFromString(output);

        // getting root element
        Node root = document.getDocumentElement();
        NodeList currencies = root.getChildNodes();

        // just for further reference
        Node usDollar;
        Node euro;

        for (int i = 0; i < currencies.getLength(); i++) {
            Node currency = currencies.item(i);
            String key = currency.getAttributes().getNamedItem("ID").getNodeValue();

            if (key.equals("R01235") || key.equals("R01239")) {
                if (key.equals("R01235")) // US dollar ID
                    usDollar = currency;
                else if (key.equals("R01239")) // Euro ID
                    euro = currency;

                NodeList currencySpecs = currency.getChildNodes();
                System.out.print(currencySpecs.item(1).getTextContent());
                System.out.print(" " + currencySpecs.item(3).getTextContent());
                System.out.print(" " + currencySpecs.item(4).getTextContent());
                System.out.println();
            }
      }
    }

    public static String getAndReadData(String link) {
        String output = "";
        try {

            URL url = new URL(link);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setRequestProperty("Accept", "application/xml");
            conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Linux; Android 4.2.2; en-us; SAMSUNG GT-I9505 Build/JDQ39) " +
                    "AppleWebKit/535.19 (KHTML, like Gecko) Version/1.0 Chrome/18.0.1025.308 Mobile Safari/535.19.");

            if (conn.getResponseCode() != 200) {
                throw new RuntimeException("Failed : HTTP error code : "
                        + conn.getResponseCode());
            }

            // below is the key line,
            // without second parameter - Charset.forName("CP1251") - 
            // data in Cyrillic will be returned like ������ ���
            InputStreamReader inputStreamReader = new InputStreamReader(conn.getInputStream(), Charset.forName("CP1251"));

            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

            String line;
            while ((line = bufferedReader.readLine()) != null) {
                output += line;
            }

            conn.disconnect();

            return output;

        } catch (MalformedURLException e) {
            e.printStackTrace();
            return null;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

    public static Document loadXMLFromString(String xml)
    {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = null;
        try {
            builder = factory.newDocumentBuilder();
            InputSource inputSource = new InputSource(new StringReader(xml));
            return builder.parse(inputSource);
        } catch (ParserConfigurationException | SAXException | IOException e) {
            e.printStackTrace();
            return null;
        }
    }
}

Итак, правильный вывод:

USD Доллар США 63,3791
EUR Евро 70,5980

И без указания Charset.forName("CP1251"):

USD ������ ��� 63,3791
EUR ���� 70,5980

Конечно, реальная кодировка в вашем случае может отличаться от CP1251, так что если эта не работает, попробуйте другую кодировку.

person Dmitriy Fialkovskiy    schedule 30.07.2019