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即可
随机推荐
- 执行Maven install或Maven test命令时控制台输出乱码的解决办法
[解决方案一] 在Maven的pom.xml文件中增加如下代码: <properties> <argLine>-Dfile.encoding=UTF-8</argLine ...
- day19 Models补充+缓存+信号+序列化+分析抽屉页面
参考链接: http://www.cnblogs.com/wupeiqi/articles/5237704.html http://www.cnblogs.com/wupeiqi/articles/5 ...
- 【Windows】Python脚本随机启动
Python脚本的管理在linux系统上市非常方便的,在windows则不是很方面.但是由于之前对于Windows这块的内容不是很了解,其实计划任务也是不错的,但和linux相比起来还是欠缺了那么点. ...
- hdu 1817 Necklace of Beads(Polya定理)
Necklace of Beads Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- 【Html 学习笔记】第六节——列表
无序列表:<ul></ul> 有序列表:<ol start=$num></ol> 不同类型的无序列表:<ul type="***&quo ...
- eureka-5- Eureka 的自我保护模式
当我们登录Eureka Dashboard ,如果看到首页显示如下,则表示,Eureka进入自我保护模式. 默认情况下,Eureka Server 在一定时间内没有接受到某个服务实例的心跳,Eurek ...
- Django WSGI,MVC,MTV,中间件部分,Form初识
一.什么是WSGI? WEB框架的本质是一个socket服务端接收用户请求,加工数据返回给客户端(Django),但是Django没有自带socket需要使用 别人的 socket配合Django才能 ...
- Redis数据结构:跳跃表
1. 跳跃表是有序集合(zset)的底层实现之一: 2. 由zskiplist和zskiplistNode组成: 3. 每个跳跃表节点的层数都是1-32之间的随机数(每创建一个节点的时候,程序会随机生 ...
- Linux:tree命令详解
tree 以树状图列出目录的内容 语法 tree(选项)(参数) 选项 -a:显示所有文件和目录: -A:使用ASNI绘图字符显示树状图而非以ASCII字符组合: -C:在文件和目录清单加上色彩,便于 ...
- DIV css中cursor属性详解-鼠标移到图片变换鼠标形状 (转)
css中cursor属性详解-鼠标移到图片变换鼠标形状 语法: cursor : auto | all-scroll | col-resize| crosshair | default | han ...