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简单样例

官方样例已经全然够用,能够去找下,是最后一个样例

  1. var xhr = new XMLHttpRequest();
  2. xhr.open("POST", "http://www.baidu.com");
  3. xhr.onreadystatechange = function() {
  4. if (xhr.readyState==4) {// 4 = "loaded"
  5. if (xhr.status==200) {// 200 = "OK"
  6. var response = xhr.responseText;//对返回结果进行处理
  7. }
  8. }
  9. }
  10. 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方法。

我用了第三种方法:

  1. function(strUtf8) {
  2. if(!strUtf8){
  3. return;
  4. }
  5. var bstr = "";
  6. var nTotalChars = strUtf8.length; // total chars to be processed.
  7. var nOffset = 0; // processing point on strUtf8
  8. var nRemainingBytes = nTotalChars; // how many bytes left to be converted
  9. var nOutputPosition = 0;
  10. var iCode, iCode1, iCode2; // the value of the unicode.
  11. while (nOffset < nTotalChars) {
  12. iCode = strUtf8.charCodeAt(nOffset);
  13. if ((iCode & 0x80) == 0) // 1 byte.
  14. {
  15. if (nRemainingBytes < 1) // not enough data
  16. break;
  17. bstr += String.fromCharCode(iCode & 0x7F);
  18. nOffset++;
  19. nRemainingBytes -= 1;
  20. }
  21. else if ((iCode & 0xE0) == 0xC0) // 2 bytes
  22. {
  23. iCode1 = strUtf8.charCodeAt(nOffset + 1);
  24. if (nRemainingBytes < 2 || // not enough data
  25. (iCode1 & 0xC0) != 0x80) // invalid pattern
  26. {
  27. break;
  28. }
  29. bstr += String
  30. .fromCharCode(((iCode & 0x3F) << 6) | (iCode1 & 0x3F));
  31. nOffset += 2;
  32. nRemainingBytes -= 2;
  33. } else if ((iCode & 0xF0) == 0xE0) // 3 bytes
  34. {
  35. iCode1 = strUtf8.charCodeAt(nOffset + 1);
  36. iCode2 = strUtf8.charCodeAt(nOffset + 2);
  37. if (nRemainingBytes < 3 || // not enough data
  38. (iCode1 & 0xC0) != 0x80 || // invalid pattern
  39. (iCode2 & 0xC0) != 0x80) {
  40. break;
  41. }
  42. bstr += String.fromCharCode(((iCode & 0x0F) << 12)
  43. | ((iCode1 & 0x3F) << 6) | (iCode2 & 0x3F));
  44. nOffset += 3;
  45. nRemainingBytes -= 3;
  46. } else
  47. // 4 or more bytes -- unsupported
  48. break;
  49. }
  50. if (nRemainingBytes != 0) { // bad UTF8 string.
  51. return "";
  52. }
  53. return bstr;
  54. }

參考:

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. DataTemplate——数据模板的一个典型例子

    下面是ListBox.ItemTemplate(数据模板)应用的“典型”例子,概述如下两点: 1:Grid部分,用来“规划” 数据 显示的 布局(即数据长成什么样子)     2:给DataTempl ...

  2. js中删除数组中某一项的方法

    1:js中的splice方法 splice(index,len,[item])    注释:该方法会改变原始数组. splice有3个参数,它也可以用来替换/删除/添加数组内某一个或者几个值 inde ...

  3. Where do I belong

    先给数组排序,然后找到指定的值在数组的位置,最后返回位置对应的索引. 举例:where([1,2,3,4], 1.5) 应该返回 1.因为1.5插入到数组[1,2,3,4]后变成[1,1.5,2,3, ...

  4. 【转】Fork/Join框架测试

    Fork/Join框架介绍 下面使用该框架计算0-50000000000的和,并比较普通计算方法.Fork/Join框架.Java8新特性三种计算方式的计算时间: import java.time.D ...

  5. 单例类singleton自动释放

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  6. SpringAnnotation注解之@Resource

    @Resource:同样也是注入,默认是按byName,byName找不到的话按byType 1 2 3 4 @Resource public void setUserDao(UserDao user ...

  7. Django中间件(勾子函数)使用

    中间件 Django中的中间件是一个轻量级.底层的插件系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出.中间件的设计为开发者提供了一种无侵入式的开发方式,增强了Django ...

  8. C++面向对象高级编程(七)point-like classes和function-like classes

    技术在于交流.沟通,转载请注明出处并保持作品的完整性. 1.pointer-like class 类设计成指针那样,可以当做指针来用,指针有两个常用操作符(*和->),所以我们必须重载这两个操作 ...

  9. PostgreSQL时间格式及相关函数实践

    在创建表的时候,有客户需要将时间转为字符串,而且要求了具体的格式,如:20181115101010001.方便记录数据的更新时间,貌似是给Mysql使用,当时就很蛋疼,时间格式存储子啊数据库中就是va ...

  10. Android性能优化系列之电量优化

    电量消耗的计算与统计是一件麻烦而且矛盾的事情,记录电量消耗本身也是一个费电量的事情,随着Android开的性能要求越来越高,电量的优化,也显得格外重要,一个耗电的应用,用户肯定会毫不犹豫的进行卸载,所 ...