Стандартный способ сериализации символов utf-8 в строке JSON - PullRequest
0 голосов
/ 05 апреля 2019

Какой стандартный способ сериализации строки utf-8 в JSON?Должно ли это быть с вашей последовательностью или это шестнадцатеричный код.

Я хочу сериализовать некоторые показания датчиков с единицами измерения в формате JSON.

Например, у меня есть показания температуры в единицах ° C.Должно ли оно быть сериализовано как

{
 "units": "\u00b0"
}
´´´
or should it be something like 
´´´
{
 "units":"c2b0"
}

или оба из них поддерживаются стандартом.

Ответы [ 2 ]

3 голосов
/ 05 апреля 2019

Если JSON используется для обмена данными, он должен использовать кодировку UTF-8 (см. RFC8259 ). Кодировки UTF-16 и UTF-32 больше не допускаются. Так что нет необходимости избегать дипломного персонажа. И я настоятельно рекомендую не убегать без необходимости.

Правильно и рекомендовано

{
  "units": "°C"
}

Конечно, вы должны применить правильную кодировку UTF-8.

Если JSON используется в закрытой экосистеме, вы можете использовать другие текстовые кодировки (хотя я рекомендовал бы против этого, если у вас нет очень веских причин). Если вам нужно экранировать символ степени в кодировке, отличной от UTF-8, правильная последовательность экранирования - \u00b0.

Возможно, но не рекомендуется

{
  "units": "\u00b0C"
}

Ваш второй подход неверен при любых обстоятельствах.

Некорректное

{
  "units":"c2b0"
}

Также неправильно использовать что-то вроде "\ xc2 \ xb0". Это экранирование, используемое в исходном коде C / C ++. Он также используется отладчиком для отображения строк. В JSON это всегда неверно.

Неверно также

{
    "units":"\xc2\xb0"
}
0 голосов
/ 07 апреля 2019

JSON использует кодировку Юникод, но указано, что вы можете использовать экранирующие коды \uxxxx для представления символов, которые не отображаются в естественной среде вашего компьютера, поэтому вполне допустимо включать такие escape-последовательности и использовать только простыекодировка ascii для передачи сериализованных данных JSON.

...