16進文字0x00を含む文字列をクリップボードにコピーして、それを外部アプリケーション(16進エディタ、メモ帳++など)に貼り付ける際に問題があります。 0x00バイトで文字列を終了します。16進数0x00を含む文字列をクリップボードにコピー
0x01 0x02 0x03 0x00 0x01 0x01 0x02を含む文字列をコピーする場合 0x01 0x02 0x03を外部アプリケーションに貼り付けます。内部
(少なくとも同じJavaプログラム内で)、それは大丈夫です、と私は戻って文字列全体を取得し、例えば:
copying string
Str length = 7
Str hex = 01 02 03 00 01 02 03
-----
Pasting string
Str length = 7
Str hex = 01 02 03 00 01 02 03
しかし、これを実行した後、外部アプリケーションにクリップボードを貼り付けるだけコピーします。文字は0x00までです。誰にどのようにこれを解決するための任意のアイデアがありますか?
ソース:私はVIMに文字列を貼り付けた場合、私のノートパソコン(OS用X)で
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.StringSelection;
public class Test
{
public static void main(String[] args)
{
String strToCopy = new String(new byte[] {0x01, 0x02, 0x03, 0x00, 0x01, 0x02, 0x03});
System.out.println("copying string");
printStringDetails(strToCopy);
copyStringToClipboard(strToCopy);
System.out.println("-----");
System.out.println("Pasting string");
String pastedString = getStringFromClipboard();
printStringDetails(pastedString);
}
public static void printStringDetails(String string)
{
System.out.println(String.format("Str length = %d", string.length()));
System.out.println(String.format("Str hex = %s", bytesToHex(string.getBytes())));
}
public static void copyStringToClipboard(String strToCopy)
{
StringSelection stringSelection = new StringSelection(strToCopy);
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(stringSelection, null);
}
public static String getStringFromClipboard()
{
String returnedString = "";
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
try
{
returnedString = (String)clipboard.getData(DataFlavor.stringFlavor);
}
catch(Exception e)
{
e.printStackTrace();
}
return returnedString;
}
/*
* Converts bytes array to hex string
*/
public static String bytesToHex(byte[] byteArray)
{
StringBuilder sb = new StringBuilder();
for(byte b : byteArray)
{
sb.append(String.format("%02X", b));
sb.append(" ");
}
return sb.toString();
}
}
他のプラットフォームでも試してみます。 私はC++プログラムの文字列を "手動で"メモ帳++にコピーしています。これはJavaからNotepad ++への変換ではないので、Javaの問題だと思いますが、間違っている可能性があります – Wassa