Tôi đang làm việc với các chuỗi, có thể chứa ký tự unicode thay thế (không phải BMP, 4 byte cho mỗi ký tự).Sự cố với các ký tự unicode thay thế trong F #
Khi tôi sử dụng định dạng "\ Uxxxxxxxxv" để chỉ định ký tự thay thế trong F # - đối với một số ký tự, nó cho kết quả khác với trường hợp của C#. Ví dụ:
C#:
string s = "\U0001D11E";
bool c = Char.IsSurrogate(s, 0);
Console.WriteLine(String.Format("Length: {0}, is surrogate: {1}", s.Length, c));
Cung cấp: Length: 2, is surrogate: True
F #:
let s = "\U0001D11E"
let c = Char.IsSurrogate(s, 0)
printf "Length: %d, is surrogate: %b" s.Length c
Cung cấp: Length: 2, is surrogate: false
Lưu ý: Một số ký tự thay thế hoạt động trong F # ("\ U0010011", "\ U00100011"), nhưng một số ký tự không hoạt động.
Q: Đây có phải là lỗi trong F # không? Làm thế nào tôi có thể xử lý cho phép các ký tự unicode thay thế trong chuỗi với F # (Liệu F # có định dạng khác nhau, hoặc cách duy nhất là sử dụngChar.ConvertFromUtf32 0x1D11E
)
Cập nhật:
s.ToCharArray()
cho cho F # [| 0xD800; 0xDF41 |]
; cho C# { 0xD834, 0xDD1E }
Đây là những phương pháp khuôn khổ do đó, không khác nhau giữa C# và F #. Các lỗi như một lỗi trình biên dịch xử lý chuỗi ký tự. Tài liệu những gì bạn nhận được ra khỏi s.ToCharArray(). –
1) Char.IsSurrogate có 2 chữ ký - thứ hai cho phép sử dụng chuỗi và vị trí; 2) * let s = '\ U0001D11E' * kết quả trong lỗi biên dịch – Vitaliy