Haxe标准库中Json API的中文解析bug

2023-10-11 21:58

本文主要是介绍Haxe标准库中Json API的中文解析bug,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目前的工作中需要在Haxe中解析Json文本,在haxelib中有两个Json相关的第三方库,不过都很久没更新了,从Haxe 2.1以后,Json API已经成为标准库中的一部分,具体即haxe.Json类。

目前我只用到解析,用起来也很简单,调用Json.parse(jsonText: String)即可把Json文本解析成Dynamic对象。支持布尔、整数、浮点数、字符串、数组、复合对象等数据类型。

要注意的一点是,属性名也必须用双引号引起来,否则无法解析,如下示例,uid和name外面的双引号是不能省略的:

{ "uid": 12345, "name": "Rocks Wang" }

在Flash目标中,运行时的字符串编码是Unicode,因此中文毫无问题,这里不赘述。

在cpp目标中,字符串在运行时其实就是C++中的char*,因此中文编码是需要引起特别注意的。Haxe及NME中对中文的处理还算不错,绝大部分情况下,只要保证使用UTF-8编码,中文即可正常解析及显示。

Json API也是一样,只要Json.parse(jsonText: String) 中jsonText参数是以UTF-8编码的,即可解析包含中文的Json文本。

但是实际使用中发现中文解析经常出错,经源码分析,确定是Json类中存在一个Bug,具体修正如下:

321行,修正前:

    else if( c >= 0x80 ) {
        pos++;  //这里多跳了一个字符,因为nextChar本身就要跳一个字符
        if( c >= 0xE0 ) pos += 1 + (c & 32); //根据第5位决定是否多跳一个字符,具体请参见UTF-8编码规范
修正后:

    else if( c >= 0x80 ) {
        pos += 1 + ((c & 32) >> 5);

做此修正后,Json类可完美解析含中文的Json文本数据。

 

这篇关于Haxe标准库中Json API的中文解析bug的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/191090

相关文章

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

JSON Web Token在登陆中的使用过程

《JSONWebToken在登陆中的使用过程》:本文主要介绍JSONWebToken在登陆中的使用过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录JWT 介绍微服务架构中的 JWT 使用结合微服务网关的 JWT 验证1. 用户登录,生成 JWT2. 自定义过滤

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应