I try to implement Irn answer in How to work with char types in Dart? (Print alphabet) But didn't catch exactly how to do it.
Example In my Dart code İ capital i with dot above represent as byte[304] and I have to replace this with server byte[152] and send to server as byte not a string.
Test-1:
cpToLatin9(int cp) => const {0x11e: 0xd0, 0x11f: 0xf0, 0x130: 0xdd, 0x131: 0xfd, 0x15e: 0xde, 0x15f: 0xfe}[cp] ?? cp;
latin9ToCp(int latin9Char) => const {0xd0: 0x11e, 0xf0: 0x11f, 0xdd: 0x130, 0xfd: 0x131, 0xde: 0x15e, 0xfe: 0x15f}[latin9Char] ?? latin9Char;
String iso08859_9 = "çÇğĞıİşŞöÖüÜ";
List<int> bytes = utf8.encode(iso08859_9);
for (var i = 0; i < bytes.length; i++) {
int byte = bytes[i];
var latin9ToCodePoint = latin9ToCp(byte);
print("latin9ToCodePoint: $latin9ToCodePoint");
var latin9ToCodePointChar = String.fromCharCode(latin9ToCodePoint);
print("latin9ToCodePointChar: $latin9ToCodePointChar");
}
Output:
iso08859_9 bytes: [195, 167, 195, 135, 196, 159, 196, 158, 196, 177, 196, 176, 197, 159, 197, 158, 195, 182, 195, 150, 195, 188, 195, 156]
latin9ToCodePoint: 195
latin9ToCodePointChar: Ã
latin9ToCodePoint: 167
latin9ToCodePointChar: §
latin9ToCodePoint: 195
latin9ToCodePointChar: Ã
latin9ToCodePoint: 135
latin9ToCodePointChar:
latin9ToCodePoint: 196
latin9ToCodePointChar: Ä
latin9ToCodePoint: 159
latin9ToCodePointChar:
latin9ToCodePoint: 196
latin9ToCodePointChar: Ä
latin9ToCodePoint: 158
latin9ToCodePointChar:
latin9ToCodePoint: 196
latin9ToCodePointChar: Ä
latin9ToCodePoint: 177
latin9ToCodePointChar: ±
latin9ToCodePoint: 196
latin9ToCodePointChar: Ä
latin9ToCodePoint: 176
latin9ToCodePointChar: °
latin9ToCodePoint: 197
latin9ToCodePointChar: Å
latin9ToCodePoint: 159
latin9ToCodePointChar:
latin9ToCodePoint: 197
latin9ToCodePointChar: Å
latin9ToCodePoint: 158
latin9ToCodePointChar:
latin9ToCodePoint: 195
latin9ToCodePointChar: Ã
latin9ToCodePoint: 182
latin9ToCodePointChar: ¶
latin9ToCodePoint: 195
latin9ToCodePointChar: Ã
latin9ToCodePoint: 150
latin9ToCodePointChar:
latin9ToCodePoint: 195
latin9ToCodePointChar: Ã
latin9ToCodePoint: 188
latin9ToCodePointChar: ¼
latin9ToCodePoint: 195
latin9ToCodePointChar: Ã
latin9ToCodePoint: 156
latin9ToCodePointChar:
Test-2: If I change List bytes = utf8.encode(iso08859_9); to
List bytes = iso08859_9.codeUnits; I get a different result.
In my Dart I test it that the iso08859_9 character represent as iso08859_9 bytes:
[231, 199, 287, 286, 305, 304, 351, 350, 246, 214, 252, 220]
Now my main problem to change the bytes to IBM CP bytes to
[135, 128, 167, 166, 141, 152, 159, 158, 148, 153, 129, 154]
When I do this and use socket.add(ibmcp_bytes) to server the character is nor readable.
Update:
try this and find out 1 and 2 bytes as a result. ???
print("ç".runes.length);
print(utf8.encode("ç").length);