Chcę uzyskać podciąg o danej długości, powiedzmy 150. Jednak chcę się upewnić, że nie odcinam łańcucha pomiędzy znakami Unicode.Bezpieczne podstruktury UTF-16 w C# .NET
np. zobacz następujący kod:
var str = "Hello world!";
var substr = str.Substring(0, 6);
Tutaj substr
jest nieprawidłowy ciąg od Smiley znak jest przecięty na pół.
Zamiast chcę funkcję, która robi, co następuje:
var str = "Hello world!";
var substr = str.UnicodeSafeSubstring(0, 6);
gdzie substr
zawiera "Hello"
Dla porównania, tutaj jest to, jak byłoby to zrobić w Objective-C za pomocą rangeOfComposedCharacterSequencesForRange
NSString* str = @"Hello world!";
NSRange range = [message rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, 6)];
NSString* substr = [message substringWithRange:range]];
Jaki jest równoważny kod w C#?
@Eser UTF-16 może mieć 2 lub nawet 3 znaki. Więc tak, możesz przeciąć je na pół. –
@Eser przeczytać https://msdn.microsoft.com/en-us/library/system.string(v=vs.110).aspx#Characters Char jest codepoint, znak Unicode może zawierać więcej niż 1 Char. Dla np. to 0xD83D 0xDE03, czyli 2 16-bitowe znaki. –
Nie rozumiem, co powinna funkcja substr zrobić ... w "Hello", co to jest ''? A jak ma działać z [łącząc znaki] (https://en.wikipedia.org/wiki/Combining_character)? (więc, na przykład, możesz mieć 'a +' jeśli podzielisz go, otrzymasz 'a' bez znaku diakrytycznego ... – xanatos