PHP Декодирование и кодировка JSON с символами Unicode

У меня есть какой-то JSON, мне нужно декодировать, изменять, а затем кодировать, не запутая любых персонажей.

Если у меня есть символ Unicode в json String, он не будет декодировать. Я не уверен, что, поскольку json.org говорит, что строка может содержать: любой-однокод-символ - кроме - «- или - \ - или-контроль-символ . Но это не работает в Python Либо.

{"Tag":"Odómetro"}

Я могу использовать UTF8_ENCODE, который позволит декодировать строку с JSON_DeCode, однако символ попадает в что-то другое. Это результат от печати_r массив результатов. Два символа.

[Tag] => Odómetro

Когда я кодирую Массив снова я сбежал в ASCII, что правильно в соответствии с SPECII json:

"Tag"=>"Od\u00f3metro"

Есть ли что-то, как я могу не избежать этого? json_encode не дает такой опции, utf8_encode тоже не работает.

Редактировать Я вижу, что есть вариант unescaped_unicode для json_encode. Однако он не работает должным образом. Ой, черт возьми, это только на PHP 5.4. Мне придется использовать некоторое регулярное выражение, так как у меня только 5,3.

$json = json_encode($array, JSON_UNESCAPED_UNICODE);
Warning: json_encode() expects parameter 2 to be long, string ...
-121 -697788- SegFault с использованием QSORT Мне нужно сортировать массив символов, чтобы повторить его, и распечатать уникальные точки данных и их счет. Это Массив проводится в узле связанного списка, и я хочу использовать QSort, чтобы сделать ...

Мне нужно сортировать массив символов, чтобы повторить его, и распечатать уникальные точки данных и их счет. Этот массив проводится внутри узла связанного списка, и я хочу использовать QSORT , чтобы сделать это. К сожалению, я получаю SegFault прямо в этой конкретной линии.

void printArray(Node_ptr node){

    int count=0; //character count

    char *temp= node->attributes; //duplicate attribute array



    char cur; //current char

    char *outputCat= emalloc(150); //concatenate counts to a single string

    outputCat= "Attribute %d counts are: ";



    qsort(&temp, lineCount, sizeof(char), compare); //sort the array

    ... more code
}

Я качал метод сравнения от Page Man QSORT

int compare(const void *a, const void *b){

  return strcmp(*(char * const *) a, *(char * const *) b);

}

в DDD, линия Qsort - это тот, который вызывает SegFault. Я изначально подумал, что это связано с неточностями параметрами, поэтому я положил в некоторые отладочные операторы PrintF. PrintF («% s», Temp) распечатывает 1000 символов, что именно то, что должно быть линейным. Chars 1 байт каждый, поэтому нет необходимости в Sizeof (Char) здесь.

Отчет об ошибках от DDD на этой строке

Program received signal SIGSEGV, Segmentation fault.    
0xb7f8c498 in ?? () from /lib/libc.so.6

Это ошибка QSort, или что-то еще с моим кодом?

0
задан Jason 11 September 2011 в 23:10
поделиться