將包含十六進制字符0x00的字符串複製到剪貼板並將其粘貼到外部應用程序(十六進制編輯器,記事本++等)中時遇到問題。它在0x00字節處終止字符串。將包含十六進制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。有沒有人有任何想法如何解決這個問題?
來源:
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++程序複製到Notepad ++並且它可以工作,而不是從Java到Notepad ++,所以我認爲這是一個Java問題,但可能是錯誤的 – Wassa