概要
-
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
-
Windows 10 バージョン 2004 (20H1) / 20H2 上で 半角カナのフォームを含んだ Access ファイルでエラーが発生する
💡 対応時期、暫定の対処方法が上記ページに記載されています。
-
DoCmd.OpenForm メソッドで、濁点を含んだの全角カタカナフォーム名に対して、半角フォーム名文字列指定していた場合にエラーが発生するようになった。
💡 既存コードに問題がある場合です(実際のフォーム名と全角半角の相違がある)
-
Option Compare Database
、またはOption Compare Text
を指定してガ
とガ
を=演算子で比較すると、結果が異なる(StrCompなども)⚡ Access VBAの既定値は
Option Compare Database
のため、比較的影響は大きいかもしれません。
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
のため、影響は限定的と思われます。