Skip to content
This repository was archived by the owner on Jan 14, 2023. It is now read-only.

Add support of UTF-8! #29

Open
wants to merge 2 commits into
base: obsolete/master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@

/**
* @author damonkohler@google.com (Damon Kohler)
* @author mick.gaillard@gmail.com (Mickael Gaillard)
*/
public enum PrimitiveFieldType implements FieldType {

Expand Down Expand Up @@ -571,7 +572,7 @@ public int getSerializedSize() {
@Override
public <T> void serialize(T value, ChannelBuffer buffer) {
Preconditions.checkArgument(value instanceof String);
byte[] bytes = ((String) value).getBytes();
byte[] bytes = ((String) value).getBytes(DEFAULT_CHARSET);
buffer.writeInt(bytes.length);
buffer.writeBytes(bytes);
}
Expand All @@ -581,7 +582,7 @@ public <T> void serialize(T value, ChannelBuffer buffer) {
public String deserialize(ChannelBuffer buffer) {
int length = buffer.readInt();
ByteBuffer stringBuffer = buffer.readSlice(length).toByteBuffer();
return Charset.forName("US-ASCII").decode(stringBuffer).toString();
return DEFAULT_CHARSET.decode(stringBuffer).toString();
}

@SuppressWarnings("unchecked")
Expand Down Expand Up @@ -678,6 +679,7 @@ public String getJavaTypeName() {
}
};

private static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
private static final ImmutableSet<String> TYPE_NAMES;

static {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@

/**
* @author damonkohler@google.com (Damon Kohler)
* @author mick.gaillard@gmail.com (Mickael Gaillard)
*/
public class RawMessageSerializationTest {

Expand Down Expand Up @@ -138,6 +139,71 @@ public void testString() {
rawMessage.setString("data", "Hello, ROS!");
checkSerializeAndDeserialize(rawMessage);
}

@Test
public void testStringUTF8() {
RawMessage rawMessage = messageFactory.newFromType("std_msgs/String");
rawMessage.setString("data", "éêè €àáßëœ 文字化け");
checkSerializeAndDeserialize(rawMessage);

// i18n test case
// base on http://www.inter-locale.com/whitepaper/learn/learn-to-test.html

// Combining Marks and Accents test
rawMessage.setString("data", "àéîōũ");
checkSerializeAndDeserialize(rawMessage);

// DOS 860 test
rawMessage.setString("data", "você nós mãe avô irmã criança");
checkSerializeAndDeserialize(rawMessage);

// Windows-1252 test
rawMessage.setString("data", "€ŒœŠš™©‰ƒ");
checkSerializeAndDeserialize(rawMessage);

// Turkish test
rawMessage.setString("data", "ışık bir İyi Günler");
checkSerializeAndDeserialize(rawMessage);

// Dakuten and handakuten marks test
rawMessage.setString("data", "がざばだぱか゛さ゛た゛は");
checkSerializeAndDeserialize(rawMessage);

// Combining Grapheme Joiner character
rawMessage.setString("data", "אִ͏ַ");
checkSerializeAndDeserialize(rawMessage);

// Bidi with Latin test
rawMessage.setString("data", "abcאבגדabc ");
checkSerializeAndDeserialize(rawMessage);

rawMessage.setString("data", "אבגדabcאבגד");
checkSerializeAndDeserialize(rawMessage);

rawMessage.setString("data", "אבגד012אבגד");
checkSerializeAndDeserialize(rawMessage);

rawMessage.setString("data", "אבגד 012 012");
checkSerializeAndDeserialize(rawMessage);

// Complex Scripts test
rawMessage.setString("data", "สวัสดี");
checkSerializeAndDeserialize(rawMessage);

rawMessage.setString("data", "டாஹ்கோ");
checkSerializeAndDeserialize(rawMessage);

rawMessage.setString("data", "بِسْمِ اللّهِ الرَّحْمـَنِ الرَّحِيمِ");
checkSerializeAndDeserialize(rawMessage);

// Numeric Shaping test
rawMessage.setString("data", "عدد مارس ١٩٩٨");
checkSerializeAndDeserialize(rawMessage);

// Common Scripts and Encodings test
rawMessage.setString("data", "Слава Жанна Ювеналий Ярополк");
checkSerializeAndDeserialize(rawMessage);
}

@Test
public void testTime() {
Expand Down