代理ユニコード文字(非BMP、1文字あたり4バイト)を含む可能性のある文字列を使用しています。
「\Uxxxxxxxxv」形式を使用してF#で代理文字を指定すると、一部の文字ではC#の場合とは異なる結果が得られます。例えば:
C#:
string s = "\U0001D11E";
bool c = Char.IsSurrogate(s, 0);
Console.WriteLine(String.Format("Length: {0}, is surrogate: {1}", s.Length, c));
与える:Length: 2, is surrogate: True
F#:
let s = "\U0001D11E"
let c = Char.IsSurrogate(s, 0)
printf "Length: %d, is surrogate: %b" s.Length c
与える:Length: 2, is surrogate: false
注:一部の代理文字はF#( "\ U0010011"、 "\ U00100011")で機能しますが、一部は機能しません。
Q:これはF#のバグですか?F#を使用した文字列で許可されたサロゲートUnicode文字を処理するにはどうすればよいですか(F#の形式は異なりますか、それとも使用する方法のみです Char.ConvertFromUtf32 0x1D11E
)
更新:
s.ToCharArray()
F#を提供し[| 0xD800; 0xDF41 |]
ます; C#の場合{ 0xD834, 0xDD1E }