Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What are the problem?

posted at

updated at

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

概要

  • 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のため、影響は限定的と思われます。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What are the problem?