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即可
随机推荐
- VS2013 VC++的.cpp文件调用CUDA的.cu文件中的函数
CUDA 8.0在函数的调用中方便的让人感动.以下是从网上学到的VC++的.cpp文件调用CUDA的.cu文件中的函数方法,和一般的VC++函数调用的方法基本没差别. 使用的CUDA版本为CUDA 8 ...
- 详解offset
offset offset 译为“偏移量”,是javascript很重要的一个概念.涉及到便宜量的主要有offsetLeft.offsetTop.offHeight.offsetWidth这四个属性还 ...
- 文件上传及时显示, 前端js和后端php相互结合使用
文件读取 javascript 绑定文件上传变化事件 onchange 利用window对象 FileReader 调用方法 readerAsDataURL onload 方法 异步读取 属性:fil ...
- 【待填坑】ajax问题
原生xhr怎么写? 怎么处理回调? 问:http状态码常见有哪些? 问:302是啥?304是啥?什么时候会返回304?你刚刚说浏览器缓存,具体缓存机制是怎么样的? 问:你刚刚说的是发起一个get请求, ...
- IE中的if语句--实现不同版本IE浏览器不同html代码 (转)
在很多html代码中常常可以看到很多的IE的条件语句,有时候很不明白他们的意思,其实这是为了能与低版本浏览器实现更好的兼容,例如在制作纯CSS的级联菜单时,由于在IE6中只有<a>支持伪类 ...
- Upgrade Bash on Ubuntu from 14.04 to 16.04
过程 1 sudo -S apt-mark hold sudo sudo -S apt-mark hold procps sudo -S apt-mark hold strace 2 sudo do- ...
- Jquery Json解析
JSON的优点: 1.基于纯文本,跨平台传递极其简单: 2.Javascript原生支持,后台语言几乎全部支持: 3.轻量级数据格式,占用字符数量极少,特别适合互联网传递: 4.可读性较强,虽然比不上 ...
- windows的虚拟磁盘(vhd,vhdx)使用
以前一直使用u盘或者移动硬盘接上usb直接拷贝文件,发觉速度一般.而且一般只有一个盘,分类也很不方便. 后来发现windows的虚拟磁盘可以解决我的问题... 经过一段时间的使用后发觉使用虚拟磁盘的方 ...
- Kafka 单节点多Kafka Broker集群
Kafka 单节点多Kafka Broker集群 接前一篇文章,今天搭建一下单节点多Kafka Broker集群环境. 配置与启动服务 由于是在一个节点上启动多个 Kafka Broker实例,所以我 ...
- 我也说说Emacs吧(5) - 基本编辑操作
基本编辑操作 进入编辑模式 标准的emacs用户是遇不到这一节的,因为默认就可以编辑.但是spacemacs用户需要先学习一下强大的vi的模式切换功能了. vi的一个重要特点就是命令特别多,所以一旦学 ...