LoginSignup
4
3

More than 3 years have passed since last update.

(2021/01/18追記)全角カタカナと半角カタカナを同じ文字として区別せずに比較する機能がWindows 10 バージョン 2004 / 20H2で挙動が変わった

Last updated at Posted at 2020-11-14

概要

  • WindowsのOSとして用意されている機能として、全角カタカナと半角カタカナ(例えばガ)を同じ文字として区別せずに判定する機能があります。

    しかし、Windows 10 バージョン 2004 / 20H2でOS の自然言語処理を担う NLS (National Language Support) バージョンが更新 (6.3) され、この機能を使用しても別の文字として判定されるように挙動が変わりました。

    全角カタカナと半角カタカナの【区別をしない】機能でガを比較

    OS 比較結果
    ~1909 同一である
    2004/20H2 同一ではない
  • 以下の製品などに影響があるようですが、影響は限定的と思われます。

    • Access
    • Excel
    • .NET(Visual Basic/C#)
    • VB6
  • 根本的な対応時期は、以下となるようです。詳細は引用元をご参照ください。

    つまり、既にリリース済のバージョン 2004 および 20H2 において既存のバージョンのまま問題を回避することは機能仕様上出来ず、2021年以降の Windows 10 OS にて本問題を修正したバージョンがリリースされます。

    これらのことから、バージョン 2004 および 20H2 においては、利用者様にて問題が発生しないように対応をしていただく必要があります。

    引用元:Windows 10 バージョン 2004 (20H1) / 20H2 上で 半角カナのフォームを含んだ Access ファイルでエラーが発生する

履歴

  • (2020/12/02) より詳細な検証記事がこちらにありました!

  • (2021/01/18) Oracleのフィールド名で半角カタカナ(コードデータなど)を使用した場合に、Windows 10 バージョン 2004 以降でフィールド名を認識しない(要求された名前または序数に対するコレクションが見つかりませんというエラーが発生)という事例がありました。

  • (2021/01/21) 2020/12/9に公式ドキュメントで暫定対応策が追記されましたが、「複数システム間の影響」を考慮すると適用できる事例は限定されそうです。

影響

確認・調査した限りの影響を記載します。

Access

Excel

  • Windows 10 Pro 2004、Office 365(16.0.12527.21924)の環境で、濁点を含んだ全角カタカナと半角カタカナで同じシート名を設定できました。

    このファイルをWindows 10 Pro 1909、Office 365(16.0.13328.20262)の環境で開くことはできました。ただし、シートをリネームして再び確定すると名前が同一であるという旨のエラーが表示されました。

  • Option Compare Textを指定してガを=演算子で比較すると、結果が異なります(StrCompなども)。
      
    💡 Excel VBAの既定値はOption Compare Binaryのため、影響は限定的と思われます。

.NET(Visual Basic/C#)

.NET Framework 3.5、4.7.2で調査しました。.NET Coreは調査できていません。

10 Pro 2004、.NET Framework 4.7.2で、CompareInfo.Compare(,,CompareOptions.IgnoreWidth)、またはVisual BasicでOption Compare Textを指定して=演算子で比較すると、挙動が変わっていました。

OS .NET Framworkのバージョン ガを同一としてみなす機能で比較した際の結果
10 Pro 1909 3.5 同一と判定される
10 Pro 1909 4.7.2 同一と判定される
10 Pro 2004 3.5 同一と判定される
10 Pro 2004 4.7.2 同一と判定されない ※挙動が変わっている

CompareInfo.Compare(,,CompareOptions.IgnoreWidth)

💡 Visual Basicのコードは省略します。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace sample
{
    class Program
    {
        static void Main(string[] args)
        {
            System.Globalization.CompareInfo ci = System.Globalization.CultureInfo.CurrentCulture.CompareInfo;
            var result = (ci.Compare("ガ", "ガ", System.Globalization.CompareOptions.IgnoreWidth) == 0);
            Console.WriteLine($@"{result}");
        }

    }
}

Option Compare Textを指定して=演算子で比較

💡 Visual Basicの既定値はOption Compare Binaryのため、影響は限定的と思われます。

Option Compare Text

Sub Main()
    Dim result = ("ガ" = "ガ")
    Console.WriteLine($"{result}")
End Sub

VB6

実際に調査できていませんが、VB6の既定値はOption Compare Binaryのため、影響は限定的と思われます。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3