summaryrefslogtreecommitdiff
path: root/ACEXML/common/Encoding.cpp
diff options
context:
space:
mode:
authornobody <nobody@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2002-11-19 08:40:28 +0000
committernobody <nobody@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2002-11-19 08:40:28 +0000
commitdee899c8ff99fe26e308f713e728db4dff2882c7 (patch)
tree93ac25cea28e28f3892623e98e3657d2597bb550 /ACEXML/common/Encoding.cpp
parent33dcb4d2015f14836d30cb0cd9210a1b9fd25107 (diff)
downloadATCD-Validator_20021119.tar.gz
This commit was manufactured by cvs2svn to create tagValidator_20021119
'Validator_20021119'.
Diffstat (limited to 'ACEXML/common/Encoding.cpp')
-rw-r--r--ACEXML/common/Encoding.cpp21
1 files changed, 13 insertions, 8 deletions
diff --git a/ACEXML/common/Encoding.cpp b/ACEXML/common/Encoding.cpp
index 7fe8811cdbd..9bf788ff649 100644
--- a/ACEXML/common/Encoding.cpp
+++ b/ACEXML/common/Encoding.cpp
@@ -7,8 +7,8 @@ const ACEXML_Char* ACEXML_Encoding::encoding_names_[8] = {
ACE_TEXT ("UCS-4LE"),
ACE_TEXT ("UCS-4_2143"),
ACE_TEXT ("UCS-4_3412"),
- ACE_TEXT ("UTF-16BE"),
- ACE_TEXT ("UTF-16LE"),
+ ACE_TEXT ("UTF-16"),
+ ACE_TEXT ("UTF-16"),
ACE_TEXT ("UTF-8"),
ACE_TEXT ("Unsupported Encoding")
};
@@ -18,8 +18,8 @@ const ACEXML_UTF8 ACEXML_Encoding::byte_order_mark_[][4] = {
{ '\xFF', '\xFE', '\x00', '\x00' }, // UCS-4, little-endian (4321 order)
{ '\x00', '\x00', '\xFF', '\xFE' }, // UCS-4, unusual octet order (2143)
{ '\xFE', '\xFF', '\x00', '\x00' }, // UCS-4, unusual octet order (3412)
- { '\xFE', '\xFF', '\xFF', '\xFF' }, // UTF-16, big-endian (3 & 4 ignored)
- { '\xFF', '\xFE', '\xFF', '\xFF' }, // UTF-16, little-endian ( 3 & 4 ignored)
+ { '\xFE', '\xFF', '\xFF', '\xFF' }, // UTF-16, big-endian (3 & 4 != 0)
+ { '\xFF', '\xFE', '\xFF', '\xFF' }, // UTF-16, little-endian ( 3 & 4 != 0)
{ '\xEF', '\xBB', '\xBF', '\xFF' } // UTF-8
};
@@ -36,11 +36,13 @@ const ACEXML_UTF8 ACEXML_Encoding::magic_values_[][4] = {
const ACEXML_Char*
ACEXML_Encoding::get_encoding (const char* input)
{
- if (ACE_OS::memcmp (&ACEXML_Encoding::byte_order_mark_[ACEXML_Encoding::UTF16BE][0], input, 2) == 0)
+ if ((ACE_OS::memcmp (&ACEXML_Encoding::byte_order_mark_[ACEXML_Encoding::UTF16BE][0], input, 2) == 0)
+ && (input[2] != 0 || input[3] != 0)) // 3 & 4 should not be both zero
return ACEXML_Encoding::encoding_names_[ACEXML_Encoding::UTF16BE];
- else if (ACE_OS::memcmp (&ACEXML_Encoding::byte_order_mark_[ACEXML_Encoding::UTF16LE][0], input, 2) == 0)
+ else if ((ACE_OS::memcmp (&ACEXML_Encoding::byte_order_mark_[ACEXML_Encoding::UTF16LE][0], input, 2) == 0)
+ && (input[2] != 0 && input[3] != 0)) // 3 & 4 should not be both zero
return ACEXML_Encoding::encoding_names_[ACEXML_Encoding::UTF16LE];
- else if (ACE_OS::memcmp (&ACEXML_Encoding::byte_order_mark_[ACEXML_Encoding::UTF8][0], input, 4) == 0)
+ else if (ACE_OS::memcmp (&ACEXML_Encoding::byte_order_mark_[ACEXML_Encoding::UTF8][0], input, 3) == 0)
return ACEXML_Encoding::encoding_names_[ACEXML_Encoding::UTF8];
else if (ACE_OS::memcmp (&ACEXML_Encoding::magic_values_[ACEXML_Encoding::UTF16BE][0], input, 4) == 0)
return ACEXML_Encoding::encoding_names_[ACEXML_Encoding::UTF16BE];
@@ -49,5 +51,8 @@ ACEXML_Encoding::get_encoding (const char* input)
else if (ACE_OS::memcmp (&ACEXML_Encoding::magic_values_[ACEXML_Encoding::UTF8][0], input, 4) == 0)
return ACEXML_Encoding::encoding_names_[ACEXML_Encoding::UTF8];
else
- return ACEXML_Encoding::encoding_names_[ACEXML_Encoding::OTHER];
+ {
+ // ACE_ERROR ((LM_ERROR, "Unknown encoding. Assuming UTF-8\n"));
+ return ACEXML_Encoding::encoding_names_[ACEXML_Encoding::UTF8];
+ }
}