如何使用java将日语编码文本(Unicode类型除外)复制到剪贴板?

时间:2012-06-20 03:32:06

标签: java encoding clipboard

所以,我已经制作了一个程序,可以成功地从剪贴板中捕获文本并通过Java中的System.out.println进行打印。然后,我想将修改后的文本复制到剪贴板。以下是该代码的片段:

                 StringSelection ss = new StringSelection(result);                        
                 Toolkit.getDefaultToolkit().getSystemClipboard().setContents(ss, null);

结果是修改后的String,当我将结果变量打印到控制台时,它仍然可读。但是,剪贴板上复制的文本似乎与原始文件的编码不同,而是显示不可读的字符。

我能做些什么来克服这个问题吗?非常感谢您的回答,谢谢:)

EDITED: 对不起,事实证明,文本在复制到任何Windows程序(如便签,单词等)时都可读。但是当我将其复制到Atlas Translator时,似乎无法读取我怀疑的Unicode编码流java中的默认编码。

所以,我修改过的问题是:我如何转换字符串选择,使其具有日语编码,但不是Unicode?非常感谢任何答案,谢谢! :)

1 个答案:

答案 0 :(得分:0)

试试这个程序,将解决您的问题

public class UTFDemo {

    public static void main(String s[]) {
        //String message = "Езикова";
        String message = "LiuYan 刘研";
        System.out.println("Original Message : " + message);
        StringSelection ss = new StringSelection(message);
        Clipboard cb = Toolkit.getDefaultToolkit().getSystemClipboard();
        cb.setContents(ss, null);

        String result = getClipboardContents();
        System.out.println("Result : " + result);
    }

    public static String getClipboardContents() {
        String result = "";
        Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
        //odd: the Object param of getContents is not currently used
        Transferable contents = clipboard.getContents(null);
        boolean hasTransferableText =
                (contents != null)
                && contents.isDataFlavorSupported(DataFlavor.stringFlavor);
        if (hasTransferableText) {
            try {
                result = (String) contents.getTransferData(DataFlavor.stringFlavor);
            } catch (UnsupportedFlavorException ex) {
                //highly unlikely since we are using a standard DataFlavor
                System.out.println(ex);
                ex.printStackTrace();
            } catch (IOException ex) {
                System.out.println(ex);
                ex.printStackTrace();
            }
        }
        return result;
    }