Windowsでnullバイト(ASCII 0x00)をクリップボードにコピーする方法はありますか?


14

Nullバイト(ASCII 0x00)は、Windowsではコピー可能(Ctrl + C対応)に見えません。このデモを行うには、ブラウザの開発コンソールを開いて実行してくださいconsole.log('a\x00b')。結果の文字列をWindows 8マシン(およびおそらく他のバージョンのWindows)にコピーアンドペーストすると、コピーされるのはだけaです。\x00そして、それは無視された後、すべてのもの。

nullバイトを含む文字列全体をコピーする方法はありますか?クリップボードはnullバイトも保持できますか?

(補助的な質問:nullバイトをコピーできないのはなぜですか?たとえば、これにセキュリティ関連の理由があるのでしょうか、それとも単にWindowsがばかげているのでしょうか?)


いい質問です。クリップボードに入れているかどうかを確認してください。xxdがnullを出力できるかどうかを確認してください C:\>echo 000000| xxd -r -p|xxd -p<ENTER> 000000 C:\>echo 000000| xxd -r -p|clip<ENTER> >
barlop

unxutils gclipとpclip C:\>echo 000000| xxd -r -p|gclip<ENTER> C:\>pclip|xxd -p<ENTER> C:\>pclip>a.a<ENTER> <- を使用すると、ヌルがクリップボードに入っているかどうか、またはヌルがクリップボードにあるかどうかはわかりません。
Barlop 2015

2
チェーンのどこかで、プログラムはnullで終了する文字列関数/表現(つまり、C文字列関数)を使用しています。ごく普通。そのようなことについての私のわずかな理解は「はい」です。主に文字列の長さの誤認とバッファオーバーフロー(??)の可能性が原因で、nullの埋め込みに潜在的なセキュリティ問題があります。
Yorik

それは不可解です。JPGの内容をクリップボードにコピーし、それを読み戻したところ、最初のnullで切り捨てられました。これは、クリップボードがテキストベースであることを示唆しています。それでも、グラフィックパッケージ間で画像を問題なくスクリーンダンプまたはカットアンドペーストできます。
AFH、2015

使用するフォーマットに依存すると思います。クリップボードはさまざまな形式をサポートしています。テキストをコピーする場合、ほとんどの場合null文字は文字列ターミネーターとして使用されているため、サポートされていません。バイナリクリップボード形式を使用する場合は、nullバイトをコピーして貼り付けることができます。
Alexey Ivanov 2016

回答:


10

いいえ、ヌル文字が埋め込まれたテキストをクリップボードに置くことはできません。標準のWindowsクリップボード形式のリストを見てみましょう。一般にテキストとして理解されるものを保持するいくつかの形式があります。

  • CF_TEXT (1)
  • CF_OEMTEXT (7)
  • CF_UNICODETEXT (13)

それらのどれもその定義にこの文があります:

null文字はデータの終わりを示します。

現在、CF_UNICODETEXT データはUTF-16LEとして保持されているため、null バイトが含まれる可能性が高くなりますが、null文字(基本的には2つのnullバイトが続けて)によって文字列が終了します。

クリップボードテキストでnull文字が許可されない理由について推測することしかできませんが、Windowsで最も一般的に使用されている文字列処理関数がnull文字で終了を通知すると想定しているためと考えられます。文字列がどこで停止するかを知る唯一の他の方法は、文字列にその長さを前に付けることです。

グラフィックは異なるバイトボード形式(例:)で渡されるため、nullバイトが含まれている場合でも、グラフィックをクリップボードに保持できCF_BITMAPます。


ありがとう-すばらしい答え。私は間違いなくWindowsクリップボードについていくつかの良いことを学びました。
senshin
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.