Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在将包含十六进制0x00的字符串复制到剪贴板_Java_String_Byte_Clipboard - Fatal编程技术网

Java 正在将包含十六进制0x00的字符串复制到剪贴板

Java 正在将包含十六进制0x00的字符串复制到剪贴板,java,string,byte,clipboard,Java,String,Byte,Clipboard,我在将包含十六进制字符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 ----

我在将包含十六进制字符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();
}
}
在我的笔记本电脑(OSX)中,如果我将字符串粘贴到VIM,一切都会正常进行

以下是十六进制信息:


我认为问题取决于外部应用程序的实现。如果它可以处理0x00,它将接收整个字符串。

ASCII
0x00
表示
NUL

来自超级用户处理此“字符”的以下问题: :

不可以,不能将嵌入空字符的文本放在 剪贴板

空字符表示数据结束


我会在其他平台上尝试。我已经“手动”将字符串从C++程序复制到记事本+ +,它工作,不是从java到记事本++,所以我认为这是java问题,但可能是错误的。