Sandy has asked for the wisdom of the Perl Monks concerning the following question:

Has anybody else ever had this problem??

I have a record in my database that uses a 'degree' symbol in it's comment (ascii value = xB6).

When I query it under Solaris 2.8 with perl5 (revision 5.0 version 8 subversion 2) this character is returned as a '?' (ascii x3F).

When I run the query under Active State (revision 5 version 6 subversion 1) under Windows NT, it is returned correctly.

Similarly with the character \0335 (ascii value DD). It returns a 'Y'.

I can't seem to find a pattern in the conversion from one character to another.

Sandy

UPDATE: It is the ordinal value of the character that is being modified.

(I tested this before I posted it, but I forgot to mention). (For an example, see addtional post Re: Re: Re: Re: DBD:ODBC does not return characters with ascii value > 128 correctly (5.8.2 on Solaris -> 5.6.1 on Windows works) in answer to hardburn)

Is this a bug?? (seems so to me...)

  • Comment on DBD:ODBC does not return characters with ascii value > 128 correctly (5.8.2 on Solaris -> 5.6.1 on Windows works)

Replies are listed 'Best First'.
Re: DBD:ODBC does not return characters with ascii value > 128 correctly (5.8.2 on Solaris -> 5.6.1 on Windows works)
by hardburn (Abbot) on Feb 23, 2004 at 20:58 UTC

    There are no ASCII characters over 127. Anything more than that is a system-specific extention.

    ----
    : () { :|:& };:

    Note: All code is untested, unless otherwise stated

      OK OK, technically speaking you are correct. However, I don't really care if the 'degree sign' shows up as a little happy face, or even a frowny face, as long as the 'byte' that was read from the oracle database remains true.

        Are you sure the data coming back really is mangled incorrectly? It could be that your shell is trying to interpret it and outputs garbage. Try running the string through ord (which gives you the base-10 value of each char) like this:

        my $str = "abcdef"; my @nums = map ord, split //, $str; print join ' ', @nums;

        The above is tested, though perhaps overly-golfed for to make a good answer :)

        ----
        : () { :|:& };:

        Note: All code is untested, unless otherwise stated

        Actually, degree sign was never \xb6.

Re: DBD:ODBC does not return characters with ascii value > 128 correctly (5.8.2 on Solaris -> 5.6.1 on Windows works)
by ambrus (Abbot) on Feb 23, 2004 at 21:37 UTC

    \xDD => Y seems logical, as \xDD is Y with acute in the 8859_1 and 8859_2 charsets.

      That seems like something a console would do :)