web-dev-qa-db-ja.com

Windowsでのコピーアンドペースト後にUnicode文字が疑問符に置き換えられる

私はこの奇妙な問題をWindows 8から何年もの間抱えてきました(私が正しく覚えていれば、私は今Windows 10にいます。問題は私の仕事用コンピューターにのみあるようです。他のパーソナルコンピューターは最初は回避策を見つけたので、最初は助けを求めることは考えませんでした。これについては後で説明しますが、十分だと思います。

基本的に、Unicodeテキスト(日本語、アラビア語など)をコピーして貼り付けると、貼り付け時に疑問符として表示されます。コピーする日本語のテキストの例を次に示します。

何これ?!意味わかない!

貼り付けた後の様子は次のとおりです。

????!??????!

興味深いことに、まったく同じテキストをもう一度もう一度コピーすると、正しく貼り付けられます...

何これ?!意味わかない!

コピーする前に選択から1文字でも削除すると、問題が「リセット」されます。

これが私の回避策でした。難しいことではありませんが、他のPCは正常に動作するため、いつも忘れがちです。これにより、手順が増え、貴重な秒数が無駄になります。

問題はシステム全体に及び、私が使用するすべてのプログラムとアプリに影響を与えます。

これを永久に修正する方法はありますか?どんな助けも高く評価されます。

4
DeVilFisCh

私は何年もこの問題に「苦しんで」おり、上記のコメントでサニーが「ロケール」を表明するまでは、修正が非常に簡単であるとは知りませんでした(ありがとう、サニー!)。ははは!とにかく、私と同じ問題が発生した場合の修正方法は次のとおりです。

これはWindows 10(ビルド15002)に適用されますが、Windowsの古い(または新しい)バージョンに似ている可能性があります。

  1. コントロールパネルの[地域]設定に移動します。これを行うにはいくつかの方法があり、そのうちのいくつかを以下に示します。
    • タスクバーの検索バー(Cortana)で、「コントロールパネル」を検索します。コントロールパネルで、カテゴリビューの時計、言語、地域の下にある日付、時刻、または数値の形式を変更をクリックするか、アイコンリストで地域をクリックします。見る
    • Windows 10のみ:もう一度検索バーで「地域と言語の設定」を検索します。これにより、設定アプリの[地域と言語]ページが開きます。 追加の日付、時刻、および地域の設定が見つかるまで下にスクロールします。次に、開くコントロールパネルウィンドウでRegionを選択します。
  2. Administrativeタブを開いて、-Change system localeボタンをクリックします。現在のロケールとは異なるロケールを選択してください。私は日本語で行きました。コピーアンドペーストする言語を選択するのが最善だと思いますが、それでも同じです。 OKで変更を確認します。
  3. システムは再起動を求めてきますが、変更に気づくためには明らかにこれを行う必要があります。
  4. 再起動後、コピーと貼り付けが意図したとおりに機能するかどうかをテストします。成功したら、上記の手順をもう一度やり直して、実際に使用する必要があるロケールに切り替えることができます。

それでおしまい!コピー&ペーストをお楽しみください! ;)

5
DeVilFisCh

Microsoftの製品はすべてUnicodeに準拠しています。問題を修正するためにロケールを変更する必要があることは意味がありません。

????? UnicodeまたはUTF-8が正しく認識されていないことを示します(おそらくプログラムとクリップボードの間で)別の文字セットとして誤診されることはありません。

しかし、これは実際のバグのようです-OSは最初はASCIIであると思っていたようですが、その後UTF-8で再試行しました。Unicodeの世界は非常に複雑です-格納する可能なすべての文字セットで完全なUnicodeを使用するには、スペースを2倍にしてすべての関数をUTF-16準拠に変換する必要があります-大規模な作業であり、あまり実用的ではありません-UTF-16/32に変換する必要があるストレージと処理を想像してください-私たちはあなたが所有または表示するすべてのドキュメントについて話している...したがって、実際には標準のUTFを8ビットにエンコードするUTF-8を使用します。ただし、レガシー関数とASCIIベースのドキュメントはUTF-ASCIIなどに変換する必要があります。ここで起こっていることは、OSがエンコーディングがASCIIであり、別の関数/クラスを使用してコピーと貼り付けを行った(またはデフォルトの関数/クラス)であると誤って推測した)ことです。エンコードはUnicodeであることがわかりました。そのエンコードを使用しました。UnicodeUTF-8が標準ですが、言語ごとに平均で約3〜4の異なるエンコードがあります。処理するOS、およびエンコーディングが何であるかを事前に知ることなく-それを決定することはかなり難しいです。

コンピューターの観点から見ると、キャラクターは1と0の所定のセットのように見えるだけで、たとえば01000001が「A」であるという正しい変換が何であるかを客観的に知る方法はありません。また、ヘブライ語のאや他の文字の場合もあります。 Unicodeはそのすべてを変更しました-各文字には固有の8ビット割り当てがあり、エンコード範囲に基づいてそれが何であるかを決定できます。

したがって、正しく動作しないコピーアンドペーストは、おそらくASCII-アップグレードするとレガシー機能と関係があり、アップグレードすると問題が解決するはずです!

2
Danny F