Estoy trabajando con cadenas, que podrían contener caracteres sustitutos Unicode (no BMP, 4 bytes por carácter).Problema con caracteres unicode en sustitución en F #
Cuando uso el formato "\ Uxxxxxxxxv" para especificar el carácter sustituto en F # - para algunos caracteres da un resultado diferente que en el caso de C#. Por ejemplo:
C#:
string s = "\U0001D11E";
bool c = Char.IsSurrogate(s, 0);
Console.WriteLine(String.Format("Length: {0}, is surrogate: {1}", s.Length, c));
Da: Length: 2, is surrogate: True
F #:
let s = "\U0001D11E"
let c = Char.IsSurrogate(s, 0)
printf "Length: %d, is surrogate: %b" s.Length c
Da: Length: 2, is surrogate: false
Nota: algunos personajes sustitutos funcionan en F # ("\ U0010011", "\ U00100011"), pero algunos de ellos no funcionan.
P: ¿Esto es un error en F #? ¿Cómo puedo mango permitido caracteres Unicode sustitutas en las cadenas con F # (no F # tiene un formato diferente, o sólo la forma es utilizarChar.ConvertFromUtf32 0x1D11E
)
Actualización:
s.ToCharArray()
da para F # [| 0xD800; 0xDF41 |]
; para C# { 0xD834, 0xDD1E }
Estos son métodos marco por lo que no difieren entre C# y F #. Quacks como un error del compilador que maneja el literal de la cadena. Documente lo que obtiene de s.ToCharArray(). –
1) Char.IsSurrogate tiene 2 firmas; la segunda permite usar la secuencia y la posición; 2) * let s = '\ U0001D11E' * da como resultado el error del compilador – Vitaliy