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 中文乱码的更多相关文章

  1. js url传值中文乱码完美解决(JAVA)

    js url传值中文乱码完美解决(JAVA) 首先在你的jsp页面这样更改: var url="你要传入的Action的位置&ipid="+ipid+"& ...

  2. JS传参中文乱码

    在传参的时候给中文参数加上两个encodeURI即可,类似这样: encodeURI(encodeURI(balanceUnit)) 写法二 escape(encodeURI(tmplItem.hyz ...

  3. js 学习之路4:js运行/输出中文乱码问题解决

    网上找了一个简单的例子,编写出来很简单,但是乱码的问题稍微困扰了一下. 题目: 1. 大马驮2石粮食,中马驮1石粮食,两头小马驮一石粮食,要用100匹马,驮100石粮食,该如何调配? js解决代码: ...

  4. JS传参中文乱码问题.NET

    前台js代码 window.location.href = "/product.aspx?id=2&title=" +encodeURIComponent(strtitle ...

  5. 又一个js乱码的秘密alert放在js文件里中文乱码,可是放在HTML里显示中文就很好

    用文本文档打开你的js文件,文件-另存为,编码更改为UTF-8保存. 回复 | PFly | 园豆:94 (初学一级) | 2017-07-17 21:32 显示结果中文乱码 支持(0)反对(0)回复 ...

  6. objective-c 与 js之间传递中文乱码

    最近在做关于js改写oc framework的小project,遇到了不少问题 其中刚遇到的是关于如何在两者之间传递中文字符,带特殊字符的URL字符串 不会很详细的介绍太多,以后会回头做个总结 oc传 ...

  7. idea环境下js、css中文乱码

    idea2018.2+tomcat8+java8+win10 异常:本地js和css通过tomcat发布时,在页面打印出的中文是乱码.而从数据库读取的中文数据和html的中文显示正常. 解决方法: 步 ...

  8. 解决JS传参中文乱码

    function PopupFK(cNum,type){ var url = "contract!Paying.action"; url = url + "?contra ...

  9. jquery------显示加载的js时出现中文乱码解决方法

    方法: 把my.js文件复制出来,用记事本打开,再另存为的时候设置编码格式为utf-8即可

随机推荐

  1. .Net Core 修改默认的启动端口

    今天无意中发现一个变化,因为很久没看.net core的项目了,发现项目启动的默认端口已经不是5000了,记得很清楚,最早那还是.net core 1.x版本的时候,每次启动都会默认是5000端口号, ...

  2. shell数组中“和@的妙用

    #!/bin/bashlist=(4k"8k a bit""16k abc""32k gold"64k)for i in "${l ...

  3. CentOS 7.2下编译安装PHP7.0.10+MySQL5.7.14+Nginx1.10.1

    一.安装前的准备工作 1.yum update    #更新系统 2.yum install gcc gcc-c++ autoconf automake cmake bison m4 libxml2  ...

  4. [Java基础] 深入jar包:从jar包中读取资源文件

    转载: http://hxraid.iteye.com/blog/483115?page=3#comments 我们常常在代码中读取一些资源文件(比如图片,音乐,文本等等).在单独运行的时候这些简单的 ...

  5. Highcharts 散点图

    Highcharts 散点图 配置 chart 配置 配置 chart 的 type 为 'scatter' .chart.type 描述了图表类型.默认值为 "line". ch ...

  6. 029——VUE中键盘语义修饰符

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. Java进阶1. Synchronized 关键字

    Java进阶1. Synchronized 关键字 20131025 1.关于synchronized的简介: Synchronized 关键字代表对这个方法加锁,相当于不管那一个线程,运行到这个方法 ...

  8. Java复习7.输入输出流

    Java复习7.输入输出流 20131005 前言: Java中涉及数据的读写,都是基于流的,这一块的知识相当重要,而且在Java中的数据,char字符是16bit的,所以存在字节流和字符流的区别.如 ...

  9. poj 1258 Agri-Net 最小生成树 prim算法+heap不完全优化 难度:0

    Agri-Net Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 41230   Accepted: 16810 Descri ...

  10. Redis数据结构:字典(hash表)

    使用场景: # set person name "tom" # set person name "jerry" 1. 字典结构: 哈希表数据结构 typedef ...