It's ISO 8859-1, not "ISO 18859-1", at least according to ANSI/ASHRAE

Standard 135-2004.

Use tvb_get_string_enc() wherever possible.

svn path=/trunk/; revision=53840
This commit is contained in:
Guy Harris 2013-12-08 01:28:00 +00:00
parent b4b18b314a
commit e1c994f55f
1 changed files with 22 additions and 21 deletions

View File

@ -3526,20 +3526,20 @@ BACnetBinaryPV [] = {
}; };
#define ANSI_X34 0 #define ANSI_X3_4 0 /* ANSI X3.4, a/k/a "ASCII"; full UTF-8 since 2010? */
#define IBM_MS_DBCS 1 #define IBM_MS_DBCS 1 /* "IBM/Microsoft DBCS"; was there only one such DBCS? */
#define JIS_C_6226 2 #define JIS_C_6226 2 /* JIS C 6226 */
#define ISO_10646_UCS4 3 #define ISO_10646_UCS4 3 /* ISO 10646 (UCS-4) - 4-byte Unicode */
#define ISO_10646_UCS2 4 #define ISO_10646_UCS2 4 /* ISO 10646 (UCS-2) - 2-byte Unicode Basic Multilingual Plane (not UTF-16, presumably) */
#define ISO_18859_1 5 #define ISO_8859_1 5 /* ISO 8859-1 */
static const value_string static const value_string
BACnetCharacterSet [] = { BACnetCharacterSet [] = {
{ ANSI_X34, "ANSI X3.4 / UTF-8 (since 2010)"}, { ANSI_X3_4, "ANSI X3.4 / UTF-8 (since 2010)"},
{ IBM_MS_DBCS, "IBM/Microsoft DBCS"}, { IBM_MS_DBCS, "IBM/Microsoft DBCS"},
{ JIS_C_6226, "JIS C 6226"}, { JIS_C_6226, "JIS C 6226"},
{ ISO_10646_UCS4, "ISO 10646(UCS-4)"}, { ISO_10646_UCS4, "ISO 10646 (UCS-4)"},
{ ISO_10646_UCS2, "ISO 10646(UCS-2)"}, { ISO_10646_UCS2, "ISO 10646 (UCS-2)"},
{ ISO_18859_1, "ISO 18859-1"}, { ISO_8859_1, "ISO 8859-1"},
{ 0, NULL} { 0, NULL}
}; };
@ -6282,35 +6282,36 @@ fCharacterString(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint offs
* other dissectors need to handle various * other dissectors need to handle various
* character encodings. * character encodings.
*/ */
str_val = tvb_get_string(wmem_packet_scope(), tvb, offset, l);
/** this decoding may be not correct for multi-byte characters, Lka */ /** this decoding may be not correct for multi-byte characters, Lka */
switch (character_set) { switch (character_set) {
case ANSI_X34: case ANSI_X3_4:
fConvertXXXtoUTF8(str_val, &inbytesleft, out, &outbytesleft, "UTF-8"); out = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, l, ENC_UTF_8);
coding = "UTF-8"; coding = "UTF-8";
break; break;
case IBM_MS_DBCS: case IBM_MS_DBCS:
out = str_val; out = tvb_get_string(wmem_packet_scope(), tvb, offset, l);
coding = "IBM MS DBCS"; coding = "IBM MS DBCS";
break; break;
case JIS_C_6226: case JIS_C_6226:
out = str_val; out = tvb_get_string(wmem_packet_scope(), tvb, offset, l);
coding = "JIS C 6226"; coding = "JIS C 6226";
break; break;
case ISO_10646_UCS4: case ISO_10646_UCS4:
str_val = tvb_get_string(wmem_packet_scope(), tvb, offset, l);
fConvertXXXtoUTF8(str_val, &inbytesleft, out, &outbytesleft, "UCS-4BE"); fConvertXXXtoUTF8(str_val, &inbytesleft, out, &outbytesleft, "UCS-4BE");
coding = "ISO 10646 UCS-4"; coding = "ISO 10646 UCS-4";
break; break;
case ISO_10646_UCS2: case ISO_10646_UCS2:
fConvertXXXtoUTF8(str_val, &inbytesleft, out, &outbytesleft, "UCS-2BE"); out = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, l, ENC_UCS_2|ENC_BIG_ENDIAN);
coding = "ISO 10646 UCS-2"; coding = "ISO 10646 UCS-2";
break; break;
case ISO_18859_1: case ISO_8859_1:
fConvertXXXtoUTF8(str_val, &inbytesleft, out, &outbytesleft, "ISO8859-1"); out = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, l, ENC_ISO_8859_1);
coding = "ISO 8859-1"; coding = "ISO 8859-1";
break; break;
default: default:
out = str_val; /* Assume this is some form of extended ASCII, with one-byte code points for ASCII characters */
out = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, l, ENC_ASCII);
coding = "unknown"; coding = "unknown";
break; break;
} }