16 진수 0x00을 포함하는 문자열을 클립 보드에 복사하고이를 외부 응용 프로그램 (16 진수 편집기, 메모장 ++ 등)에 붙여 넣을 때 문제가 있습니다. 0x00 바이트에서 문자열을 종료합니다.16 진수 0x00을 포함하는 문자열을 클립 보드에 복사
문자열을 복사 할 때 0x01 0x02 0x03 0x00 0x01 0x01 0x02 외부 응용 프로그램에만 0x01 0x02 0x03을 붙여 넣습니다. 내부적으로
(같은 자바 프로그램은 적어도 이내), 괜찮아, 나는 다시 예를 들어, 전체 문자열을 얻을 :
이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