86 |
++num_bytes; |
++num_bytes; |
87 |
else if (buf[i] <= 0x07FF) |
else if (buf[i] <= 0x07FF) |
88 |
num_bytes += 2; |
num_bytes += 2; |
89 |
else |
else if (buf[i] < 0xD800 || buf[i] > 0xDFFF) |
90 |
num_bytes += 3; |
num_bytes += 3; |
91 |
|
else if (buf[i] < 0xDC00 |
92 |
|
&& i + 1 < offset + len |
93 |
|
&& buf[i + 1] >= 0xDC00 |
94 |
|
&& buf[i + 1] <= 0xDFFF) |
95 |
|
{ |
96 |
|
num_bytes += 4; |
97 |
|
i++; |
98 |
|
} |
99 |
|
else |
100 |
|
num_bytes += 1; |
101 |
} |
} |
102 |
|
|
103 |
return(num_bytes); |
return(num_bytes); |
126 |
bbuf[bbuf_offset] = (byte)(0x80 | (buf[i] & 0x3F)); |
bbuf[bbuf_offset] = (byte)(0x80 | (buf[i] & 0x3F)); |
127 |
++bbuf_offset; |
++bbuf_offset; |
128 |
} |
} |
129 |
else |
else if (buf[i] < 0xD800 || buf[i] > 0xDFFF) |
130 |
{ |
{ |
131 |
bbuf[bbuf_offset] = (byte)(0xE0 | ((buf[i] >> 12) & 0x0F)); |
bbuf[bbuf_offset] = (byte)(0xE0 | ((buf[i] >> 12) & 0x0F)); |
132 |
++bbuf_offset; |
++bbuf_offset; |
135 |
bbuf[bbuf_offset] = (byte)(0x80 | (buf[i] & 0x3F)); |
bbuf[bbuf_offset] = (byte)(0x80 | (buf[i] & 0x3F)); |
136 |
++bbuf_offset; |
++bbuf_offset; |
137 |
} |
} |
138 |
|
else if (buf[i] < 0xDC00 |
139 |
|
&& i + 1 < buf_offset + len |
140 |
|
&& buf[i + 1] >= 0xDC00 |
141 |
|
&& buf[i + 1] <= 0xDFFF) |
142 |
|
{ |
143 |
|
int ch = 0x10000 + ((buf[i] & 0x3FF) << 10) + (buf[i + 1] & 0x3FF); |
144 |
|
bbuf[bbuf_offset] = (byte)(0xF0 | ((ch >> 18) & 0x07)); |
145 |
|
++bbuf_offset; |
146 |
|
bbuf[bbuf_offset] = (byte)(0x80 | ((ch >> 12) & 0x3F)); |
147 |
|
++bbuf_offset; |
148 |
|
bbuf[bbuf_offset] = (byte)(0x80 | ((ch >> 6) & 0x3F)); |
149 |
|
++bbuf_offset; |
150 |
|
bbuf[bbuf_offset] = (byte)(0x80 | (ch & 0x3F)); |
151 |
|
++bbuf_offset; |
152 |
|
i++; |
153 |
|
} |
154 |
|
else |
155 |
|
{ |
156 |
|
// We've got an illegal half of a surrogate pair. |
157 |
|
bbuf[bbuf_offset] = (byte)'?'; |
158 |
|
++bbuf_offset; |
159 |
|
} |
160 |
} |
} |
161 |
|
|
162 |
return(bbuf); |
return(bbuf); |