You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avro.apache.org by "Paul Dudenkov (JIRA)" <ji...@apache.org> on 2016/07/05 15:50:11 UTC
[jira] [Comment Edited] (AVRO-1875) ability encode/decode byte
arrays in Base64
[ https://issues.apache.org/jira/browse/AVRO-1875?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15362666#comment-15362666 ]
Paul Dudenkov edited comment on AVRO-1875 at 7/5/16 3:49 PM:
-------------------------------------------------------------
[~busbey]
The reason why I want to have Base64 - as of now byte arrays in JSON are encoded in Latin-1 encoding, which couldn't be displayed by UTF-8. According to JSON specification (https://tools.ietf.org/html/rfc7159#section-8.1) JSON should be encoded in UTF-8, 16 or 32, otherwise it is not valid, which causes a lot of problems when you try parse and work with them with Json libs.
Base64 allows you to see those byte arrays in UTF-8 without loss of data and is valid from point of view of Json spec.
If you write as it was earlier:
JsonDecoder jsonDecoder = DecoderFactory.get().jsonDecoder(schema, recordInString);
you will get old version of JsonDecoder, which encodes in Latin-1.
To get Base64 with this patch you need write this:
boolean base64 = true;
JsonDecoder jsonDecoder = DecoderFactory.get().jsonDecoder(schema, recordInString, base64);
This boolean variable is a member of JsonEncoder and JsonDecoder class and has default value "false", which means using Latin-1.
was (Author: nocs00):
[~busbey]
The reason why I want to have Base64 - as of now byte arrays in JSON are encoded in Latin-1 encoding, which couldn't be displayed by UTF-8. According to JSON specification (https://tools.ietf.org/html/rfc7159#section-8.1) JSON should be encoded in UTF-8, 16 or 32, otherwise it is not valid, which causes a lot of problems when you try parse and work with them with Json libs.
Base64 allows you to see those byte arrays in UTF-8 without loss of data and is valid from point of view of Json spec.
If you write as it was earlier:
JsonDecoder jsonDecoder = DecoderFactory.get().jsonDecoder(schema, recordInString);
you will get old version of JsonEncoder, which encodes in Latin-1.
To get Base64 with this patch you need write this:
boolean base64 = true;
JsonDecoder jsonDecoder = DecoderFactory.get().jsonDecoder(schema, recordInString, base64);
This boolean variable is a member of JsonEncoder and JsonDecoder class and has default value "false", which means using Latin-1.
> ability encode/decode byte arrays in Base64
> -------------------------------------------
>
> Key: AVRO-1875
> URL: https://issues.apache.org/jira/browse/AVRO-1875
> Project: Avro
> Issue Type: Improvement
> Components: java
> Reporter: Paul Dudenkov
> Fix For: 1.9.0
>
>
> Hi,
> I would like to add ability encode/decode byte arrays in Base64 in classes JsonEncoder JsonDecoder.
> For this purpose I will add new constructors and overloaded factory methods.
> Old code will work as before.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)