Java AWT Clipboard русские буквы
Нужно как-то русские символы из Java переслать в Clipboard, но чего-то страшная ересь на выходе получается.
go.pasteRus("/dump TradeSkillFrameEditBox:SetText(\"Трансмутация: извечная жизнь в тьму\")")
Функция pasteRus (Java/Scala) выглядит вот так.
def pasteRus(message: String): Unit = {
val str = new java.lang.String(message.getBytes(StandardCharsets.UTF_8), Charset.forName("cp1251"));
val output = new StringSelection(str)
clipboard.setContents(output, null)
На выходе получаю страшную ересь, уже все кодировки перепробовал что были в официальном мануале - https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html
/dump TradeSkillFrameEditBox:SetText("Трансмутация: извечная жизнь в тьму")
Есть у кого свежие идеи?
Ответы (1 шт):
Начинать нужно с ответа на вопрос в какой кодировке у вас написан текст:
Трансмутация: извечная жизнь в тьму
По сути это ответ на вопрос в какой кодировке у вас работает редактор, в котором вы пишете код. Либо это CP-1251 (Windows Cyrillic) или UTF-8, в теории конечно может быть и ISO-8859 или даже CP-866 (терминал Windows). Ну, ок - допустим это CP-1251.
Второй не менее важный вопрос в какой кодировке у вас выводит текст ваше AWT приложение, опять таки возможны варианты CP-1251 или UTF-8. Обычно совпадает с дефолтной Locale установленной в JVM.
Теперь, когда засылаем в клипборд ваш текст, его надо перекодировать в кодировку совпадающую с кодировкой AWT приложения. Конвертировать нужно так (в Scala не силен):
public String convert(String inString, String inCharset, String outCharset) {
byte[] bytes=inString.getBytes(inCharset);
return new String(bytes, outCharset);
}
Например: convert(s, "cp1251", "utf-8") //перекодировка из кодировки Windows в UTF-8
Дальше полученный String уже надо отправить в клипборд