On Wed, 6 Dec 2017 15:50:11 +0100, "H.Merijn Brand"
<h.m.br...@xs4all.nl> wrote:

> I have an Oracle databse with NLS_CHARACTERSET US7ASCII
> 
> I have a table "land", like
> 
> create table land (
>   c_land               number     (4) not null,
>   zoekarg              varchar2   (5),
>   land                 varchar2  (40),
>   diac                 number     (1),
>   d_in                 number     (8),
>   d_end                number     (8),
>   opm                  varchar2 (150),
>   mut                  number     (1),
>   icao                 varchar2   (3),
>   land_u               varchar2  (80)
>   );
> 
> In there the field "land" has the content *without* special characters,
> like
> 
>   Zuidrhodesie
> 
> the special characters are stored elsewhere, indicated by the field diac
> 
> The field land_u contains the extended land *with* diacriticals, like
> 
>   Zuidrhodesië
>              ^
> 
> in UTF-8 encoding. Note that this is possible because of US7ASCII
> 
> what is stored in the database is
> 
>   Zuidrhodesi\303\253
> 
> using perl to extract that makes displaying those values easy, but I
> have no idea how I can get programs like SQL Developer to show that
> content the way it is intended
> 
> Is there an oracle function I could use to convert byte-encode UTF-8
> to something SQL developer "understands"
> 
>   select utf8_bytes_to_utf16_for_sql_developer (land_u) from land;
> 
> any hint is welcome. Currently SQL Developer will show
> 
>   Zuidrhodesi��
> 
> where the trailing �'s are both \x0fffd (\N{REPLACEMENT CHARACTER}),
> which is not really helpful
> 
> I have been playing with several variants of
> 
>   select convert (land_u, 'AL16UTF16', 'UTF8') from land where c_land = 7072;
> 
> but I didn't get SQL Developer to show the ë

 select utl_encode.text_encode (land_u) from land where c_land = 7072;

=>

 Zuidrhodesi=C3=AB

so SQL developer *does* see the individual bytes as they are stored

I can get the expected display with

 select utl_i18n.raw_to_nchar (utl_i18n.string_to_raw (land_u), 'utf8') from 
land where c_land = 7072;

which experiences as rather overcomplicated, esp if I need to do this
for all _u fields in the query :(

-- 
H.Merijn Brand  http://tux.nl   Perl Monger  http://amsterdam.pm.org/
using perl5.00307 .. 5.27   porting perl5 on HP-UX, AIX, and openSUSE
http://mirrors.develooper.com/hpux/        http://www.test-smoke.org/
http://qa.perl.org   http://www.goldmark.org/jeff/stupid-disclaimers/

Attachment: pgpWFrCnVaEKc.pgp
Description: OpenPGP digital signature

Reply via email to