Я работаю со строками, которые могут содержать суррогатные символы Юникода (не BMP, 4 байта на символ).
Когда я использую формат "\ Uxxxxxxxxv", чтобы указать суррогатный символ в F # - для некоторых символов он дает отличный результат, чем в случае С#. Например:
С#
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" ), но некоторые из них не работают.
В: Это ошибка в F #? Как я могу обрабатывать разрешенные суррогатные символы Юникода в строках с помощью F # (имеет ли F # другой формат или только способ использовать Char.ConvertFromUtf32 0x1D11E
)
Update: s.ToCharArray()
дает для F # [| 0xD800; 0xDF41 |]
; для С# { 0xD834, 0xDD1E }