2017-04-25 18 views
1

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

答えて

0

、すべてが大丈夫になります。ここで

enter image description here

進情報です:

enter image description here

私は問題は、外部アプリケーションの実装に依存だと思います。それが0x00を処理できるならば、それは文字列全体を受け取るでしょう。

+0

他のプラットフォームでも試してみます。 私はC++プログラムの文字列を "手動で"メモ帳++にコピーしています。これはJavaからNotepad ++への変換ではないので、Javaの問題だと思いますが、間違っている可能性があります – Wassa

関連する問題