2017-04-25 3 views
1

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(); 
} 
} 

답변

0

, 모든 것이 괜찮 간다.

enter image description here

나는 문제가 외부 응용 프로그램의 구현에 따라 달라집니다 생각 : 여기

enter image description here

는 육각 정보입니다. 0x00을 처리 할 수 ​​있으면 전체 문자열을 수신합니다.

+0

다른 플랫폼에서도 사용해 보겠습니다. C++ 프로그램에서 메모장 ++로 문자열을 "수동으로"복사 했으므로 Java에서 Notepad ++로 변환되지 않으므로 Java 문제라고 생각하지만 틀릴 수도 있습니다. – Wassa