Comments (8)
@pantianying I find that java uses two 16-bit characters to represent emoji "🤣", while golang uses one rune to represent it. So the length of the emoji in java is 2, while 1 in golang.
The hessian protocol says that:
The length is the number of 16-bit characters.
So, it's a bug of golang hessian2, I will try to fix it.
from dubbo-go-hessian2.
from dubbo-go-hessian2.
@pantianying pls provide a unit test so that we can follow up
from dubbo-go-hessian2.
@pantianying pls provide a unit test so that we can follow up
from dubbo-go-hessian2.
ps:
-
Java returns the string of emoji, and the go side will scramble.
-
If Java returns Emoji in a complex map structure, the whole serialization will fail.
-
go coded emoji, Java can not receive.
from dubbo-go-hessian2.
New knowledge:
- A char is encoded in UTF-8 format in
com.caucho.hessian.io.Hessian2Output.printString()
/**
* Prints a string to the stream, encoded as UTF-8
*
* @param v the string to print.
*/
public void printString(char []v, int strOffset, int length)
throws IOException
{
int offset = _offset;
byte []buffer = _buffer;
for (int i = 0; i < length; i++) {
if (SIZE <= offset + 16) {
_offset = offset;
flushBuffer();
offset = _offset;
}
char ch = v[i + strOffset];
if (ch < 0x80)
buffer[offset++] = (byte) (ch);
else if (ch < 0x800) {
buffer[offset++] = (byte) (0xc0 + ((ch >> 6) & 0x1f));
buffer[offset++] = (byte) (0x80 + (ch & 0x3f));
}
else {
buffer[offset++] = (byte) (0xe0 + ((ch >> 12) & 0xf));
buffer[offset++] = (byte) (0x80 + ((ch >> 6) & 0x3f));
buffer[offset++] = (byte) (0x80 + (ch & 0x3f));
}
}
_offset = offset;
}
- A UTF-8 character is decoded in
com.caucho.hessian.io.Hessian2Input.parseUTF8Char()
private int parseUTF8Char()
throws IOException
{
int ch = _offset < _length ? (_buffer[_offset++] & 0xff) : read();
if (ch < 0x80)
return ch;
else if ((ch & 0xe0) == 0xc0) {
int ch1 = read();
int v = ((ch & 0x1f) << 6) + (ch1 & 0x3f);
return v;
}
else if ((ch & 0xf0) == 0xe0) {
int ch1 = read();
int ch2 = read();
int v = ((ch & 0x0f) << 12) + ((ch1 & 0x3f) << 6) + (ch2 & 0x3f);
return v;
}
else
throw error("bad utf-8 encoding at " + codeName(ch));
}
from dubbo-go-hessian2.
java only support ucs-2, while golang support ucs-4.
from dubbo-go-hessian2.
i'm working on it, and it may be resolved as early as tomorrow.
from dubbo-go-hessian2.
Related Issues (20)
- dubbo Java-Client 调用 Go-Server 接口时,获取的对象一直为null HOT 1
- different field with same pointer type under the same structure deserialization exception HOT 2
- 完善对Java枚举类型可变长参数方法的支持
- when a struct has more than one kind of empty slice whose type is pointer ,decode will panic HOT 2
- update the readme
- 怎样友好的兼容 java 中的集合类 HOT 4
- java.lang.Long 是Java特定语言类型对象,对应的Go怎么传参 HOT 5
- go-client调用Java-serve 当java接口参数类型Integer等包装类时go报错找不到服务 HOT 2
- hessian2中response.go的ReflectResponse方法注释的TODO有计划了吗? HOT 3
- 时间encode越界 HOT 7
- Support java wrapper types HOT 3
- Map嵌套Map遇到illegal class index @idx 1 HOT 2
- 两个Map结构不同但值为nil时,decode will panic
- decode Integer -> *int32 报错 HOT 1
- 单测里面使用 log.Fatal 会使得单测直接通过 HOT 3
- type transfer error HOT 3
- Dubbo-go作为Provider时, RPC返回的结构体中的指针字段无法被Java正确映射为Java包装类型 HOT 2
- hessian 解参panic HOT 8
- nil encoding not correct
- Feature: 新增对jdk17、jdk21的新类型的支持
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from dubbo-go-hessian2.