0

Javascript:

//https://www.npmjs.com/package/utf8
//https://github.com/mathiasbynens/quoted-printable
par_comment_qoted = quotedPrintable.encode(utf8.encode('test ąčęė'));
console.log('par_comment_qoted='+par_comment_qoted);
// outpt: par_comment_qoted="test =C4=85=C4=8D=C4=99=C4=97"

Oracle:

select utl_raw.cast_to_varchar2(utl_encode.quoted_printable_encode(utl_raw.cast_to_raw('test ąčęė'))) from dual;
-- output: test =E0=E8=E6=EB

Why the same operation returns different outputs? Is there any way to make the javascript as well so that it returns the same quoted printable encoding result as Oracle?

Vilius Gaidelis
  • 430
  • 5
  • 14
  • Cannot replicate the issue [db<>fiddle](https://dbfiddle.uk/?rdbms=oracle_21&fiddle=427214662f2020a47f52269c736e514f). Check what character set you are encoding the string as. – MT0 Jul 16 '22 at 20:37

1 Answers1

1

You can try using CONVERT to change the string from the database character set to UTF-8 before generating the quoted printable:

select utl_raw.cast_to_varchar2(
         utl_encode.quoted_printable_encode(
           utl_raw.cast_to_raw(
             CONVERT('test ąčęė', 'UTF8')
           )
         )
       ) AS quoted_printable
from   dual;

Which outputs:

QUOTED_PRINTABLE
test =C4=85=C4=8D=C4=99=C4=97

db<>fiddle here

Is there any way to make the javascript as well so that it returns the same quoted printable encoding result as Oracle?

You would need to work out what the database's character set is and then encode the JavaScript string using that encoding (rather than UTF-8) and generate the printed quotable based on the other character set.

MT0
  • 143,790
  • 11
  • 59
  • 117