Skip to content

Commit c08568f

Browse files
hansonrhansonr
authored andcommitted
String.getBytes(b, Charset.forName(...))
1 parent b56d3d0 commit c08568f

File tree

1 file changed

+50
-23
lines changed

1 file changed

+50
-23
lines changed

sources/net.sf.j2s.java.core/srcjs/js/j2sClazz.js

Lines changed: 50 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
// Google closure compiler cannot handle Clazz.new or Clazz.super
99

10+
// BH 1/3/2019 3.2.4.06 adds ByteBuffer/CharBuffer support, proper CharSet encoding, including GBK (Standard Chinese)
1011
// BH 12/30/2018 3.2.4.05 adds Class.forName("[XXX")
1112
// BH 12/20/2018 3.2.4.05 fixes synthetic reference issue
1213
// BH 12/13/2018 3.2.4.05 fixes Class.js field reflection, inner anonymous class of outer class creates wrong synthetic pointer
@@ -113,8 +114,8 @@ window["j2s.clazzloaded"] = true;
113114
_debugging: false,
114115
_loadcore: true,
115116
_nooutput: 0,
116-
_VERSION_R: "3.2.4.05",
117-
_VERSION_T: "3.2.4.05",
117+
_VERSION_R: "3.2.4.06",
118+
_VERSION_T: "3.2.4.06",
118119
};
119120

120121
;(function(Clazz, J2S) {
@@ -4490,26 +4491,30 @@ var getChars = function(s, srcBegin,srcEnd,dst,dstBegin, asBytes){
44904491
}
44914492
};
44924493

4494+
//var charset=["utf-8","utf8","us-ascii","iso-8859-1","8859_1","gb2312","gb18030"];
4495+
var charset=["utf-8","utf8","us-ascii","iso-8859-1"]; // gb* uses GBK
44934496
sp.getBytes$=sp.getBytes$S=sp.getBytes$java_nio_charset_Charset=function(){
44944497
var s=this;
44954498
if(arguments.length==1){
4496-
var cs=arguments[0].toString().toLowerCase();
4497-
var charset=[
4498-
"utf-8","utf8","us-ascii","iso-8859-1","8859_1","gb2312","gb18030","gbk"
4499-
];
4500-
var existed=false;
4501-
for(var i=0;i<charset.length;i++){
4502-
if(charset[i]==cs){
4503-
existed=true;
4504-
break;
4505-
}
4506-
}
4507-
if(!existed){
4508-
throw new java.io.UnsupportedEncodingException();
4509-
}
4510-
if(cs=="utf-8"||cs=="utf8"){
4511-
s=Encoding.convert2UTF8(this);
4512-
}
4499+
var cs=arguments[0].toString().toLowerCase();
4500+
var simple=false;
4501+
for(var i=0;i<charset.length;i++){
4502+
if(charset[i]==cs){
4503+
simple=true;
4504+
break;
4505+
}
4506+
}
4507+
if(!simple){
4508+
cs = arguments[0];
4509+
if (typeof cs == "string")
4510+
cs = Clazz.loadClass("java.nio.charset.Charset").forName$S(cs);
4511+
if (!cs)
4512+
throw new java.io.UnsupportedEncodingException();
4513+
return cs.encode$S(this.toString()).toArray$();
4514+
}
4515+
if(cs=="utf-8"||cs=="utf8"){
4516+
s=Encoding.convert2UTF8(this);
4517+
}
45134518
}
45144519
var arrs=[];
45154520
for(var i=0, ii=0;i<s.length;i++){
@@ -4739,12 +4744,18 @@ case 4:
47394744
// String(byte[] ascii, int hibyte, int offset, int count)
47404745

47414746
var bytes=arguments[0];
4742-
var encoding=arguments[3];
4743-
if(typeof encoding != "number"){
4744-
// assumes UTF-8
4747+
var cs=arguments[3];
4748+
if(typeof cs != "number"){
47454749
var offset=arguments[1];
47464750
var length=arguments[2];
4747-
return Encoding.readUTF8Array(bytes, offset, length);
4751+
if (typeof cs == "string") {
4752+
if (",utf8,utf-8,utf_8,".indexOf("," + cs + ",") >= 0)
4753+
return Encoding.readUTF8Array(bytes,offset,length);
4754+
cs = Clazz.loadClass("java.nio.charset.Charset").forName$S(cs);
4755+
if (!cs)
4756+
throw new java.io.UnsupportedEncodingException();
4757+
}
4758+
return cs.decode$BA$I$I(bytes, offset, length).toString();
47484759
}
47494760
var count=arguments[3];
47504761
var offset=arguments[2];
@@ -4950,6 +4961,22 @@ if (typeof c == "string")
49504961
return (c >= 0x1c && c <= 0x20 || c >= 0x9 && c <= 0xd || c == 0x1680
49514962
|| c >= 0x2000 && c != 0x2007 && (c <= 0x200b || c == 0x2028 || c == 0x2029 || c == 0x3000));
49524963
}, 1);
4964+
m$(C$,"isSurrogate$C", function(c) {
4965+
c = c.charCodeAt(0);
4966+
return c >= 0xd800 && c < 0xe000;
4967+
4968+
}, 1);
4969+
m$(C$,"isHighSurrogate$C", function(c) {
4970+
c = c.charCodeAt(0);
4971+
return c >= 0xd800 && c < 0xdc00;
4972+
4973+
}, 1);
4974+
m$(C$,"isLowSurrogate$C", function(c) {
4975+
c = c.charCodeAt(0);
4976+
return c >= 0xdc00 && c < 0xe000;
4977+
4978+
}, 1);
4979+
49534980
m$(C$,["digit$C$I","digit$I$I"],
49544981
function(c,radix){
49554982
var i = (typeof c == "string" ? c.charCodeAt(0) : c);

0 commit comments

Comments
 (0)