cocos2d js jsb XMLHttpRequest 中文乱码
1.首先讲下怎样使用XMLHttpRequest
下面所说的是在cocos2d-x 2.2.2 或者 2.3 版本号中。
首先要明确cocos2d js事实上分两个版本号,一个是html5的版本号,另外一个是jsb的版本号。尽管他们js代码一样。可是实现原理是不一样的。所以说尽管都是叫XMLHttpRequest,两个版本号也是不一样的。html5的版本号就是普通的ajax调用,jsb的没详细研究。jsb的能够自己改动C++代码。要完整下载cocos2d-x代码,详细位置在libJSBinding->manual->XMLHttpRequest
怎样注冊?
首先在项目的AppDelegate.cpp中要注冊XmlHttpRequest的回调
头文件引用#include "XMLHTTPRequest.h"
在bool AppDelegate::applicationDidFinishLaunching方法中加入
sc->addRegisterCallback(MinXmlHttpRequest::_js_register);
记得假设是Android项目,切记不要忘了在AndroidManifest.XML中加入訪问网络的权限,
<uses-permission android:name="android.permission.INTERNET" />
2.XMLHttpRequest简单样例
官方样例已经全然够用,能够去找下,是最后一个样例
var xhr = new XMLHttpRequest();
xhr.open("POST", "http://www.baidu.com");
xhr.onreadystatechange = function() {
if (xhr.readyState==4) {// 4 = "loaded"
if (xhr.status==200) {// 200 = "OK"
var response = xhr.responseText;//对返回结果进行处理
}
}
}
xhr.send("test=1");
3.XMLHttpRequest 中文乱码
如今我对中文乱码有了新的认识,事实上并非乱码,而是字符串的编码跟解析字符串的编码不一致导致了看起来乱七八糟的东西。仅仅须要调整两个编码成一致的就OK了,一般都用utf-8。
我也没细致去研究它。JS好像要显示Unicode编码,而server传给我的是utf-8。就导致了乱码。
有三种解决方式:
1.改动server的编码
2.改动cocos2d-x引擎代码 XMLHttpRequest.cpp中JS_BINDED_PROP_GET_IMPL(MinXmlHttpRequest, responseText) 方法。网络上找个c++版的utf-8转unicode方法
3.JS层找个utf-8转unicode方法。
我用了第三种方法:
function(strUtf8) {
if(!strUtf8){
return;
}
var bstr = "";
var nTotalChars = strUtf8.length; // total chars to be processed.
var nOffset = 0; // processing point on strUtf8
var nRemainingBytes = nTotalChars; // how many bytes left to be converted
var nOutputPosition = 0;
var iCode, iCode1, iCode2; // the value of the unicode.
while (nOffset < nTotalChars) {
iCode = strUtf8.charCodeAt(nOffset);
if ((iCode & 0x80) == 0) // 1 byte.
{
if (nRemainingBytes < 1) // not enough data
break;
bstr += String.fromCharCode(iCode & 0x7F);
nOffset++;
nRemainingBytes -= 1;
}
else if ((iCode & 0xE0) == 0xC0) // 2 bytes
{
iCode1 = strUtf8.charCodeAt(nOffset + 1);
if (nRemainingBytes < 2 || // not enough data
(iCode1 & 0xC0) != 0x80) // invalid pattern
{
break;
}
bstr += String
.fromCharCode(((iCode & 0x3F) << 6) | (iCode1 & 0x3F));
nOffset += 2;
nRemainingBytes -= 2;
} else if ((iCode & 0xF0) == 0xE0) // 3 bytes
{
iCode1 = strUtf8.charCodeAt(nOffset + 1);
iCode2 = strUtf8.charCodeAt(nOffset + 2);
if (nRemainingBytes < 3 || // not enough data
(iCode1 & 0xC0) != 0x80 || // invalid pattern
(iCode2 & 0xC0) != 0x80) {
break;
}
bstr += String.fromCharCode(((iCode & 0x0F) << 12)
| ((iCode1 & 0x3F) << 6) | (iCode2 & 0x3F));
nOffset += 3;
nRemainingBytes -= 3;
} else
// 4 or more bytes -- unsupported
break;
}
if (nRemainingBytes != 0) { // bad UTF8 string.
return "";
}
return bstr;
}
參考:
cocos2d js jsb XMLHttpRequest
cocos2d js jsb XMLHttpRequest 中文乱码的更多相关文章
- js url传值中文乱码完美解决(JAVA)
js url传值中文乱码完美解决(JAVA) 首先在你的jsp页面这样更改: var url="你要传入的Action的位置&ipid="+ipid+"& ...
- JS传参中文乱码
在传参的时候给中文参数加上两个encodeURI即可,类似这样: encodeURI(encodeURI(balanceUnit)) 写法二 escape(encodeURI(tmplItem.hyz ...
- js 学习之路4:js运行/输出中文乱码问题解决
网上找了一个简单的例子,编写出来很简单,但是乱码的问题稍微困扰了一下. 题目: 1. 大马驮2石粮食,中马驮1石粮食,两头小马驮一石粮食,要用100匹马,驮100石粮食,该如何调配? js解决代码: ...
- JS传参中文乱码问题.NET
前台js代码 window.location.href = "/product.aspx?id=2&title=" +encodeURIComponent(strtitle ...
- 又一个js乱码的秘密alert放在js文件里中文乱码,可是放在HTML里显示中文就很好
用文本文档打开你的js文件,文件-另存为,编码更改为UTF-8保存. 回复 | PFly | 园豆:94 (初学一级) | 2017-07-17 21:32 显示结果中文乱码 支持(0)反对(0)回复 ...
- objective-c 与 js之间传递中文乱码
最近在做关于js改写oc framework的小project,遇到了不少问题 其中刚遇到的是关于如何在两者之间传递中文字符,带特殊字符的URL字符串 不会很详细的介绍太多,以后会回头做个总结 oc传 ...
- idea环境下js、css中文乱码
idea2018.2+tomcat8+java8+win10 异常:本地js和css通过tomcat发布时,在页面打印出的中文是乱码.而从数据库读取的中文数据和html的中文显示正常. 解决方法: 步 ...
- 解决JS传参中文乱码
function PopupFK(cNum,type){ var url = "contract!Paying.action"; url = url + "?contra ...
- jquery------显示加载的js时出现中文乱码解决方法
方法: 把my.js文件复制出来,用记事本打开,再另存为的时候设置编码格式为utf-8即可
随机推荐
- java之JDBC多条语句执行
在开发过程中,有时我们需要执行多条SQL语句,那如何处理才能解决这样的问题? 1,多条语句执行错误 原因:试图用一个PreparedStatement对象,执行多次SQL操作.程序会提示一下错误: O ...
- npm install遇到的问题
phantomjs-prebuilt@2.1.16 install: 'node install.js' 在虚拟机上初始化vue-cli项目,npm install时遇到的问题 npm install ...
- HDU 3506 (环形石子合并)区间dp+四边形优化
Monkey Party Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Tot ...
- mvc框架详解
mvc全称:Model View Controller,分别为Model(模型),View(视图),Controller(控制器). 这张图就很好的解释了MVC框架的基本工作原理,Modal通常为后台 ...
- Ansible 小手册系列 四(详解配置文件)
[root@host-172-20-6-120 ansible]# ansible --version ansible 2.2.0.0 config file = /etc/ansible/ansib ...
- JDK的BIO, NIO, AIO
背景知识点我 1. BIO JDK5之前, JDK的IO模式只有BIO(同步阻塞)问题: 因为阻塞的存在, 需对每个请求开启一个线程. 过多的线程切换影响操作系统性能解决: 使用线程池, 处理不过来的 ...
- 008-对象—— 对象$this self parent 内存方式及使用方法讲解
<?php /** * */ /*class Web{ private $webname; private $weburl; function __construct($webname,$web ...
- ios8 - CoreLocation定位服务的变化
在iOS8开发中,发现一个CoreLocation的使用问题,执行操作之后,不会调用到定位之后的delegate方法中. 根据文档,需要在使用CoreLocation前调用方法: [locationm ...
- Hibernate主键生成策略详解
转载自:http://blog.csdn.net/wanghuan203/article/details/7562395 hibernate提供的主键生成策略,使我们可以在实体类的映射xml文件中设定 ...
- Sql Server- 性能优化辅助指标SET STATISTICS TIME ON和SET STATISTICS IO ON
1.前言 对于优化SQL语句或存储过程,以前主要是用如下语句来判断具体执行时间,但是SQL环境是复杂多变的,下面语句并不能精准判断性能是否提高:如果需要精确知道CPU.IO等信息,就无能为力了. 1 ...