Så jeg har en række strenge,og alle strengene bruger systemets standard ANSI-kodning og blev trukket fra en SQL-database. Så der er 256 forskellige mulige tegnbyteværdier (kodning af enkeltbyte). Er der en måde, hvorpå jeg kan få json_encode () til at arbejde og vise disse tegn i stedet for at skulle bruge utf8_encode () på alle mine strenge og ender med ting som "\ u0082"?
Eller er det standarden for json?
Стандарт JSON ИСПОЛЬЗУЕТ кодировку Unicode . Из RFC4627 :
3. Encoding
JSON text SHALL be encoded in Unicode. The default encoding is
UTF-8.
Since the first two characters of a JSON text will always be ASCII
characters [RFC0020], it is possible to determine whether an octet
stream is UTF-8, UTF-16 (BE or LE), or UTF-32 (BE or LE) by looking
at the pattern of nulls in the first four octets.
00 00 00 xx UTF-32BE
00 xx 00 xx UTF-16BE
xx 00 00 00 UTF-32LE
xx 00 xx 00 UTF-16LE
xx xx xx xx UTF-8
Следовательно, в самом строгом смысле код JSON в формате ANSI не будет действительным JSON; Вот почему PHP применяет кодировку Unicode при использовании json_encode()
.
Что касается «ANSI по умолчанию», я уверен, что ваши строки закодированы в Windows-1252. Он неправильно называется ANSI.
Я нашел следующий ответ для аналогичной проблемы с вложенным массивом, не кодированным utf-8, который мне пришлось кодировать json:
$inputArray = array(
'a'=>'First item - à',
'c'=>'Third item - é'
);
$inputArray['b']= array (
'a'=>'First subitem - ù',
'b'=>'Second subitem - ì'
);
if (!function_exists('recursive_utf8')) {
function recursive_utf8 ($data) {
if (!is_array($data)) {
return utf8_encode($data);
}
$result = array();
foreach ($data as $index=>$item) {
if (is_array($item)) {
$result[$index] = array();
foreach($item as $key=>$value) {
$result[$index][$key] = recursive_utf8($value);
}
}
else if (is_object($item)) {
$result[$index] = array();
foreach(get_object_vars($item) as $key=>$value) {
$result[$index][$key] = recursive_utf8($value);
}
}
else {
$result[$index] = recursive_utf8($item);
}
}
return $result;
}
}
$outputArray = json_encode(array_map('recursive_utf8', $inputArray ));