CharUnicodeInfo.GetNumericValue Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Získá číselnou hodnotu přidruženou znaku Unicode.
Přetížení
GetNumericValue(Char) |
Získá číselnou hodnotu přidruženou k zadanému znaku. |
GetNumericValue(String, Int32) |
Získá číselnou hodnotu přidruženou znaku v zadaném indexu zadaného řetězce. |
GetNumericValue(Char)
- Zdroj:
- CharUnicodeInfo.cs
- Zdroj:
- CharUnicodeInfo.cs
- Zdroj:
- CharUnicodeInfo.cs
Získá číselnou hodnotu přidruženou k zadanému znaku.
public:
static double GetNumericValue(char ch);
public static double GetNumericValue (char ch);
static member GetNumericValue : char -> double
Public Shared Function GetNumericValue (ch As Char) As Double
Parametry
- ch
- Char
Znak Unicode, pro který se má získat číselná hodnota.
Návraty
Číselná hodnota přidružená k zadanému znaku.
-nebo-
-1, pokud zadaný znak není číselný znak.
Příklady
Následující příklad kódu ukazuje hodnoty vrácené jednotlivými metodami pro různé typy znaků.
using namespace System;
using namespace System::Globalization;
void PrintProperties( Char c );
int main()
{
Console::WriteLine( " c Num Dig Dec UnicodeCategory" );
Console::Write( "U+0061 LATIN SMALL LETTER A " );
PrintProperties( L'a' );
Console::Write( "U+0393 GREEK CAPITAL LETTER GAMMA " );
PrintProperties( L'\u0393' );
Console::Write( "U+0039 DIGIT NINE " );
PrintProperties( L'9' );
Console::Write( "U+00B2 SUPERSCRIPT TWO " );
PrintProperties( L'\u00B2' );
Console::Write( "U+00BC VULGAR FRACTION ONE QUARTER " );
PrintProperties( L'\u00BC' );
Console::Write( "U+0BEF TAMIL DIGIT NINE " );
PrintProperties( L'\u0BEF' );
Console::Write( "U+0BF0 TAMIL NUMBER TEN " );
PrintProperties( L'\u0BF0' );
Console::Write( "U+0F33 TIBETAN DIGIT HALF ZERO " );
PrintProperties( L'\u0F33' );
Console::Write( "U+2788 CIRCLED SANS-SERIF DIGIT NINE " );
PrintProperties( L'\u2788' );
}
void PrintProperties( Char c )
{
Console::Write( " {0,-3}", c );
Console::Write( " {0,-5}", CharUnicodeInfo::GetNumericValue( c ) );
Console::Write( " {0,-5}", CharUnicodeInfo::GetDigitValue( c ) );
Console::Write( " {0,-5}", CharUnicodeInfo::GetDecimalDigitValue( c ) );
Console::WriteLine( "{0}", CharUnicodeInfo::GetUnicodeCategory( c ) );
}
/*
This code produces the following output. Some characters might not display at the console.
c Num Dig Dec UnicodeCategory
U+0061 LATIN SMALL LETTER A a -1 -1 -1 LowercaseLetter
U+0393 GREEK CAPITAL LETTER GAMMA Γ -1 -1 -1 UppercaseLetter
U+0039 DIGIT NINE 9 9 9 9 DecimalDigitNumber
U+00B2 SUPERSCRIPT TWO ² 2 2 -1 OtherNumber
U+00BC VULGAR FRACTION ONE QUARTER ¼ 0.25 -1 -1 OtherNumber
U+0BEF TAMIL DIGIT NINE ௯ 9 9 9 DecimalDigitNumber
U+0BF0 TAMIL NUMBER TEN ௰ 10 -1 -1 OtherNumber
U+0F33 TIBETAN DIGIT HALF ZERO ༳ -0.5 -1 -1 OtherNumber
U+2788 CIRCLED SANS-SERIF DIGIT NINE ➈ 9 9 -1 OtherNumber
*/
using System;
using System.Globalization;
public class SamplesCharUnicodeInfo {
public static void Main() {
Console.WriteLine( " c Num Dig Dec UnicodeCategory" );
Console.Write( "U+0061 LATIN SMALL LETTER A " );
PrintProperties( 'a' );
Console.Write( "U+0393 GREEK CAPITAL LETTER GAMMA " );
PrintProperties( '\u0393' );
Console.Write( "U+0039 DIGIT NINE " );
PrintProperties( '9' );
Console.Write( "U+00B2 SUPERSCRIPT TWO " );
PrintProperties( '\u00B2' );
Console.Write( "U+00BC VULGAR FRACTION ONE QUARTER " );
PrintProperties( '\u00BC' );
Console.Write( "U+0BEF TAMIL DIGIT NINE " );
PrintProperties( '\u0BEF' );
Console.Write( "U+0BF0 TAMIL NUMBER TEN " );
PrintProperties( '\u0BF0' );
Console.Write( "U+0F33 TIBETAN DIGIT HALF ZERO " );
PrintProperties( '\u0F33' );
Console.Write( "U+2788 CIRCLED SANS-SERIF DIGIT NINE " );
PrintProperties( '\u2788' );
}
public static void PrintProperties( char c ) {
Console.Write( " {0,-3}", c );
Console.Write( " {0,-5}", CharUnicodeInfo.GetNumericValue( c ) );
Console.Write( " {0,-5}", CharUnicodeInfo.GetDigitValue( c ) );
Console.Write( " {0,-5}", CharUnicodeInfo.GetDecimalDigitValue( c ) );
Console.WriteLine( "{0}", CharUnicodeInfo.GetUnicodeCategory( c ) );
}
}
/*
This code produces the following output. Some characters might not display at the console.
c Num Dig Dec UnicodeCategory
U+0061 LATIN SMALL LETTER A a -1 -1 -1 LowercaseLetter
U+0393 GREEK CAPITAL LETTER GAMMA Γ -1 -1 -1 UppercaseLetter
U+0039 DIGIT NINE 9 9 9 9 DecimalDigitNumber
U+00B2 SUPERSCRIPT TWO ² 2 2 -1 OtherNumber
U+00BC VULGAR FRACTION ONE QUARTER ¼ 0.25 -1 -1 OtherNumber
U+0BEF TAMIL DIGIT NINE ௯ 9 9 9 DecimalDigitNumber
U+0BF0 TAMIL NUMBER TEN ௰ 10 -1 -1 OtherNumber
U+0F33 TIBETAN DIGIT HALF ZERO ༳ -0.5 -1 -1 OtherNumber
U+2788 CIRCLED SANS-SERIF DIGIT NINE ➈ 9 9 -1 OtherNumber
*/
Imports System.Globalization
Public Class SamplesCharUnicodeInfo
Public Shared Sub Main()
Console.WriteLine(" c Num Dig Dec UnicodeCategory")
Console.Write("U+0061 LATIN SMALL LETTER A ")
PrintProperties("a"c)
Console.Write("U+0393 GREEK CAPITAL LETTER GAMMA ")
PrintProperties(ChrW(&H0393))
Console.Write("U+0039 DIGIT NINE ")
PrintProperties("9"c)
Console.Write("U+00B2 SUPERSCRIPT TWO ")
PrintProperties(ChrW(&H00B2))
Console.Write("U+00BC VULGAR FRACTION ONE QUARTER ")
PrintProperties(ChrW(&H00BC))
Console.Write("U+0BEF TAMIL DIGIT NINE ")
PrintProperties(ChrW(&H0BEF))
Console.Write("U+0BF0 TAMIL NUMBER TEN ")
PrintProperties(ChrW(&H0BF0))
Console.Write("U+0F33 TIBETAN DIGIT HALF ZERO ")
PrintProperties(ChrW(&H0F33))
Console.Write("U+2788 CIRCLED SANS-SERIF DIGIT NINE ")
PrintProperties(ChrW(&H2788))
End Sub
Public Shared Sub PrintProperties(c As Char)
Console.Write(" {0,-3}", c)
Console.Write(" {0,-5}", CharUnicodeInfo.GetNumericValue(c))
Console.Write(" {0,-5}", CharUnicodeInfo.GetDigitValue(c))
Console.Write(" {0,-5}", CharUnicodeInfo.GetDecimalDigitValue(c))
Console.WriteLine("{0}", CharUnicodeInfo.GetUnicodeCategory(c))
End Sub
End Class
'This code produces the following output. Some characters might not display at the console.
'
' c Num Dig Dec UnicodeCategory
'U+0061 LATIN SMALL LETTER A a -1 -1 -1 LowercaseLetter
'U+0393 GREEK CAPITAL LETTER GAMMA Γ -1 -1 -1 UppercaseLetter
'U+0039 DIGIT NINE 9 9 9 9 DecimalDigitNumber
'U+00B2 SUPERSCRIPT TWO ² 2 2 -1 OtherNumber
'U+00BC VULGAR FRACTION ONE QUARTER ¼ 0.25 -1 -1 OtherNumber
'U+0BEF TAMIL DIGIT NINE ௯ 9 9 9 DecimalDigitNumber
'U+0BF0 TAMIL NUMBER TEN ௰ 10 -1 -1 OtherNumber
'U+0F33 TIBETAN DIGIT HALF ZERO ༳ -0.5 -1 -1 OtherNumber
'U+2788 CIRCLED SANS-SERIF DIGIT NINE ➈ 9 9 -1 OtherNumber
Poznámky
Číselná hodnota je vlastnost znaku Unicode, která se vztahuje pouze na číselné znaky, mezi které patří zlomky, dolní indexy, horní indexy, římské číslice, čitatelé měn, obklíčená čísla a číslice specifické pro skript. Další informace o znaménách Unicode najdete v článku Standard Unicode.
Metoda GetNumericValue(Char) předpokládá, že ch
odpovídá jednomu lingvistickému znaku, a zkontroluje, zda lze tento znak převést na desetinnou číslici. Některá čísla ve standardu Unicode jsou však reprezentována dvěma Char objekty, které tvoří náhradní dvojici. Systém číslování v Egejském moři se například skládá z kódových bodů U + 10107 až U + 10133. Následující příklad používá metodu ConvertFromUtf32 k vytvoření instance řetězce, který představuje EGEJSKÉ ČÍSLO 1. Jak ukazuje výstup z příkladu, vrátí metoda hodnotu -1, GetNumericValue(Char) pokud je předána buď vysoký náhradní nebo nízký náhradní znak tohoto znaku.
int utf32 = 0x10107; // AEGEAN NUMBER ONE
string surrogate = Char.ConvertFromUtf32(utf32);
foreach (var ch in surrogate)
Console.WriteLine($"U+{(ushort)ch:X4}: {System.Globalization.CharUnicodeInfo.GetNumericValue(ch)} ");
// The example displays the following output:
// U+D800: -1
// U+DD07: -1
Dim utf32 As Integer = &h10107 ' AEGEAN NUMBER ONE
Dim surrogate As String = Char.ConvertFromUtf32(utf32)
For Each ch In surrogate
Console.WriteLine("U+{0:X4}: {1} ", Convert.ToUInt16(ch),
System.Globalization.CharUnicodeInfo.GetNumericValue(ch))
Next
' The example displays the following output:
' U+D800: -1
' U+DD07: -1
Platí pro
GetNumericValue(String, Int32)
- Zdroj:
- CharUnicodeInfo.cs
- Zdroj:
- CharUnicodeInfo.cs
- Zdroj:
- CharUnicodeInfo.cs
Získá číselnou hodnotu přidruženou znaku v zadaném indexu zadaného řetězce.
public:
static double GetNumericValue(System::String ^ s, int index);
public static double GetNumericValue (string s, int index);
static member GetNumericValue : string * int -> double
Public Shared Function GetNumericValue (s As String, index As Integer) As Double
Parametry
- index
- Int32
Index znaku Unicode, pro který se má získat číselná hodnota.
Návraty
Číselná hodnota přidružená ke znaku v zadaném indexu zadaného řetězce.
-nebo-
-1, pokud znak v zadaném indexu zadaného řetězce není číselný znak.
Výjimky
s
je null
.
index
je mimo rozsah platných indexů v s
souboru .
Příklady
Následující příklad kódu ukazuje hodnoty vrácené jednotlivými metodami pro různé typy znaků.
using namespace System;
using namespace System::Globalization;
int main()
{
// The String to get information for.
String^ s = "a9\u0393\u00B2\u00BC\u0BEF\u0BF0\u2788";
Console::WriteLine( "String: {0}", s );
// Print the values for each of the characters in the string.
Console::WriteLine( "index c Num Dig Dec UnicodeCategory" );
for ( int i = 0; i < s->Length; i++ )
{
Console::Write( "{0,-5} {1,-3}", i, s[ i ] );
Console::Write( " {0,-5}", CharUnicodeInfo::GetNumericValue( s, i ) );
Console::Write( " {0,-5}", CharUnicodeInfo::GetDigitValue( s, i ) );
Console::Write( " {0,-5}", CharUnicodeInfo::GetDecimalDigitValue( s, i ) );
Console::WriteLine( "{0}", CharUnicodeInfo::GetUnicodeCategory( s, i ) );
}
}
/*
This code produces the following output. Some characters might not display at the console.
String: a9Γ²¼௯௰➈
index c Num Dig Dec UnicodeCategory
0 a -1 -1 -1 LowercaseLetter
1 9 9 9 9 DecimalDigitNumber
2 Γ -1 -1 -1 UppercaseLetter
3 ² 2 2 -1 OtherNumber
4 ¼ 0.25 -1 -1 OtherNumber
5 ௯ 9 9 9 DecimalDigitNumber
6 ௰ 10 -1 -1 OtherNumber
7 ➈ 9 9 -1 OtherNumber
*/
using System;
using System.Globalization;
public class SamplesCharUnicodeInfo {
public static void Main() {
// The String to get information for.
String s = "a9\u0393\u00B2\u00BC\u0BEF\u0BF0\u2788";
Console.WriteLine( "String: {0}", s );
// Print the values for each of the characters in the string.
Console.WriteLine( "index c Num Dig Dec UnicodeCategory" );
for ( int i = 0; i < s.Length; i++ ) {
Console.Write( "{0,-5} {1,-3}", i, s[i] );
Console.Write( " {0,-5}", CharUnicodeInfo.GetNumericValue( s, i ) );
Console.Write( " {0,-5}", CharUnicodeInfo.GetDigitValue( s, i ) );
Console.Write( " {0,-5}", CharUnicodeInfo.GetDecimalDigitValue( s, i ) );
Console.WriteLine( "{0}", CharUnicodeInfo.GetUnicodeCategory( s, i ) );
}
}
}
/*
This code produces the following output. Some characters might not display at the console.
String: a9Γ²¼௯௰➈
index c Num Dig Dec UnicodeCategory
0 a -1 -1 -1 LowercaseLetter
1 9 9 9 9 DecimalDigitNumber
2 Γ -1 -1 -1 UppercaseLetter
3 ² 2 2 -1 OtherNumber
4 ¼ 0.25 -1 -1 OtherNumber
5 ௯ 9 9 9 DecimalDigitNumber
6 ௰ 10 -1 -1 OtherNumber
7 ➈ 9 9 -1 OtherNumber
*/
Imports System.Globalization
Public Class SamplesCharUnicodeInfo
Public Shared Sub Main()
' The String to get information for.
Dim s As [String] = "a9\u0393\u00B2\u00BC\u0BEF\u0BF0\u2788"
Console.WriteLine("String: {0}", s)
' Print the values for each of the characters in the string.
Console.WriteLine("index c Num Dig Dec UnicodeCategory")
Dim i As Integer
For i = 0 To s.Length - 1
Console.Write("{0,-5} {1,-3}", i, s(i))
Console.Write(" {0,-5}", CharUnicodeInfo.GetNumericValue(s, i))
Console.Write(" {0,-5}", CharUnicodeInfo.GetDigitValue(s, i))
Console.Write(" {0,-5}", CharUnicodeInfo.GetDecimalDigitValue(s, i))
Console.WriteLine("{0}", CharUnicodeInfo.GetUnicodeCategory(s, i))
Next i
End Sub
End Class
'This code produces the following output. Some characters might not display at the console.
'
'String: a9Γ²¼௯௰➈
'index c Num Dig Dec UnicodeCategory
'0 a -1 -1 -1 LowercaseLetter
'1 9 9 9 9 DecimalDigitNumber
'2 Γ -1 -1 -1 UppercaseLetter
'3 ² 2 2 -1 OtherNumber
'4 ¼ 0.25 -1 -1 OtherNumber
'5 ௯ 9 9 9 DecimalDigitNumber
'6 ௰ 10 -1 -1 OtherNumber
'7 ➈ 9 9 -1 OtherNumber
Poznámky
Číselná hodnota je vlastnost znaku Unicode, která se vztahuje pouze na číselné znaky, mezi které patří zlomky, dolní indexy, horní indexy, římské číslice, čitatelé měn, obklíčená čísla a číslice specifické pro skript. Další informace o znaménách Unicode najdete v článku Standard Unicode.
Char Pokud je objekt na pozici index
prvním znakem platné náhradní dvojice, metoda určí, GetNumericValue(String, Int32) zda náhradní pár tvoří číselnou číslici, a pokud ano, vrátí její číselnou hodnotu. Systém číslování v Egejském moři se například skládá z kódových bodů U + 10107 až U + 10133. Následující příklad používá metodu ConvertFromUtf32 k vytvoření instance řetězce, který představuje každé egejské číslo. Jak ukazuje výstup z příkladu GetNumericValue(String, Int32) , vrátí metoda správnou číselnou hodnotu, pokud je předána vysoká náhrada egejského čísla. Pokud však projde nízkou náhradou, bere v izolaci pouze nízkou náhradu a vrátí hodnotu -1.
// Define a UTF32 value for each character in the
// Aegean numbering system.
for (int utf32 = 0x10107; utf32 <= 0x10133; utf32++) {
string surrogate = Char.ConvertFromUtf32(utf32);
for (int ctr = 0; ctr < surrogate.Length; ctr++)
Console.Write("U+{0:X4} at position {1}: {2} ",
Convert.ToUInt16(surrogate[ctr]), ctr,
System.Globalization.CharUnicodeInfo.GetNumericValue(surrogate, ctr));
Console.WriteLine();
}
// The example displays the following output:
// U+D800 at position 0: 1 U+DD07 at position 1: -1
// U+D800 at position 0: 2 U+DD08 at position 1: -1
// U+D800 at position 0: 3 U+DD09 at position 1: -1
// U+D800 at position 0: 4 U+DD0A at position 1: -1
// U+D800 at position 0: 5 U+DD0B at position 1: -1
// U+D800 at position 0: 6 U+DD0C at position 1: -1
// U+D800 at position 0: 7 U+DD0D at position 1: -1
// U+D800 at position 0: 8 U+DD0E at position 1: -1
// U+D800 at position 0: 9 U+DD0F at position 1: -1
// U+D800 at position 0: 10 U+DD10 at position 1: -1
// U+D800 at position 0: 20 U+DD11 at position 1: -1
// U+D800 at position 0: 30 U+DD12 at position 1: -1
// U+D800 at position 0: 40 U+DD13 at position 1: -1
// U+D800 at position 0: 50 U+DD14 at position 1: -1
// U+D800 at position 0: 60 U+DD15 at position 1: -1
// U+D800 at position 0: 70 U+DD16 at position 1: -1
// U+D800 at position 0: 80 U+DD17 at position 1: -1
// U+D800 at position 0: 90 U+DD18 at position 1: -1
// U+D800 at position 0: 100 U+DD19 at position 1: -1
// U+D800 at position 0: 200 U+DD1A at position 1: -1
// U+D800 at position 0: 300 U+DD1B at position 1: -1
// U+D800 at position 0: 400 U+DD1C at position 1: -1
// U+D800 at position 0: 500 U+DD1D at position 1: -1
// U+D800 at position 0: 600 U+DD1E at position 1: -1
// U+D800 at position 0: 700 U+DD1F at position 1: -1
// U+D800 at position 0: 800 U+DD20 at position 1: -1
// U+D800 at position 0: 900 U+DD21 at position 1: -1
// U+D800 at position 0: 1000 U+DD22 at position 1: -1
// U+D800 at position 0: 2000 U+DD23 at position 1: -1
// U+D800 at position 0: 3000 U+DD24 at position 1: -1
// U+D800 at position 0: 4000 U+DD25 at position 1: -1
// U+D800 at position 0: 5000 U+DD26 at position 1: -1
// U+D800 at position 0: 6000 U+DD27 at position 1: -1
// U+D800 at position 0: 7000 U+DD28 at position 1: -1
// U+D800 at position 0: 8000 U+DD29 at position 1: -1
// U+D800 at position 0: 9000 U+DD2A at position 1: -1
// U+D800 at position 0: 10000 U+DD2B at position 1: -1
// U+D800 at position 0: 20000 U+DD2C at position 1: -1
// U+D800 at position 0: 30000 U+DD2D at position 1: -1
// U+D800 at position 0: 40000 U+DD2E at position 1: -1
// U+D800 at position 0: 50000 U+DD2F at position 1: -1
// U+D800 at position 0: 60000 U+DD30 at position 1: -1
// U+D800 at position 0: 70000 U+DD31 at position 1: -1
// U+D800 at position 0: 80000 U+DD32 at position 1: -1
// U+D800 at position 0: 90000 U+DD33 at position 1: -1
' Define a UTF32 value for each character in the
' Aegean numbering system.
For utf32 As Integer = &h10107 To &h10133
Dim surrogate As String = Char.ConvertFromUtf32(utf32)
For ctr As Integer = 0 To surrogate.Length - 1
Console.Write("U+{0:X4} at position {1}: {2} ",
Convert.ToUInt16(surrogate(ctr)), ctr,
System.Globalization.CharUnicodeInfo.GetNumericValue(surrogate, ctr))
Next
Console.WriteLine()
Next
' The example displays the following output:
' U+D800 at position 0: 1 U+DD07 at position 1: -1
' U+D800 at position 0: 2 U+DD08 at position 1: -1
' U+D800 at position 0: 3 U+DD09 at position 1: -1
' U+D800 at position 0: 4 U+DD0A at position 1: -1
' U+D800 at position 0: 5 U+DD0B at position 1: -1
' U+D800 at position 0: 6 U+DD0C at position 1: -1
' U+D800 at position 0: 7 U+DD0D at position 1: -1
' U+D800 at position 0: 8 U+DD0E at position 1: -1
' U+D800 at position 0: 9 U+DD0F at position 1: -1
' U+D800 at position 0: 10 U+DD10 at position 1: -1
' U+D800 at position 0: 20 U+DD11 at position 1: -1
' U+D800 at position 0: 30 U+DD12 at position 1: -1
' U+D800 at position 0: 40 U+DD13 at position 1: -1
' U+D800 at position 0: 50 U+DD14 at position 1: -1
' U+D800 at position 0: 60 U+DD15 at position 1: -1
' U+D800 at position 0: 70 U+DD16 at position 1: -1
' U+D800 at position 0: 80 U+DD17 at position 1: -1
' U+D800 at position 0: 90 U+DD18 at position 1: -1
' U+D800 at position 0: 100 U+DD19 at position 1: -1
' U+D800 at position 0: 200 U+DD1A at position 1: -1
' U+D800 at position 0: 300 U+DD1B at position 1: -1
' U+D800 at position 0: 400 U+DD1C at position 1: -1
' U+D800 at position 0: 500 U+DD1D at position 1: -1
' U+D800 at position 0: 600 U+DD1E at position 1: -1
' U+D800 at position 0: 700 U+DD1F at position 1: -1
' U+D800 at position 0: 800 U+DD20 at position 1: -1
' U+D800 at position 0: 900 U+DD21 at position 1: -1
' U+D800 at position 0: 1000 U+DD22 at position 1: -1
' U+D800 at position 0: 2000 U+DD23 at position 1: -1
' U+D800 at position 0: 3000 U+DD24 at position 1: -1
' U+D800 at position 0: 4000 U+DD25 at position 1: -1
' U+D800 at position 0: 5000 U+DD26 at position 1: -1
' U+D800 at position 0: 6000 U+DD27 at position 1: -1
' U+D800 at position 0: 7000 U+DD28 at position 1: -1
' U+D800 at position 0: 8000 U+DD29 at position 1: -1
' U+D800 at position 0: 9000 U+DD2A at position 1: -1
' U+D800 at position 0: 10000 U+DD2B at position 1: -1
' U+D800 at position 0: 20000 U+DD2C at position 1: -1
' U+D800 at position 0: 30000 U+DD2D at position 1: -1
' U+D800 at position 0: 40000 U+DD2E at position 1: -1
' U+D800 at position 0: 50000 U+DD2F at position 1: -1
' U+D800 at position 0: 60000 U+DD30 at position 1: -1
' U+D800 at position 0: 70000 U+DD31 at position 1: -1
' U+D800 at position 0: 80000 U+DD32 at position 1: -1
' U+D800 at position 0: 90000 U+DD33 at position 1: -1