我的flutter应用程序将用户字符串发送到渡槽,在渡槽中,我使用dart套接字将数据发送到内部服务器。在Flutter Mobile应用中,我使用带有application / json标头的http.get,并使用json.decode解码响应正文。
var _response = await http.get(Uri.encodeFull("$_socketCon"),
headers: {'Accept': 'application/json'});
if (_response.statusCode == 200) {
var _resBody = await json.decode(_response.body);
在渡槽中,我使用socket.write,并使用String.fromCharCodes(data)将数据从套接字返回到颤动的移动应用程序。
_socket = await Socket.connect('192.168.22.120', 3000);
_socket.write('$mobileData\r\n');
_reply = new String.fromCharCodes(data);
在Flutter移动应用中,我还使用replaceAll替换了如下所示的字符
_socketData = _socketData.replaceAll(new RegExp(r'Ý'), 'I');
_socketData = _socketData.replaceAll(new RegExp(r'ý'), 'i');
_socketData = _socketData.replaceAll(new RegExp(r'Ð'), 'G');
_socketData = _socketData.replaceAll(new RegExp(r'ð'), 'g');
稍后,我了解到服务器(套接字)使用了一些转换,如下所示。如果flutter移动应用发送带有chr(208)的字符串,则服务器套接字将替换为chr(166)。
数据
sLatin:
string = 'CHR(208)||CHR(220)||CHR(222)||CHR(221)||CHR(214);
sIbm:
string = 'CHR(166)||CHR(154)||CHR(158)||CHR(152)||CHR(153)';
mobil to socket
if cHarf = chr(208) then cHarf := chr(166) // Ğ
else
if cHarf = chr(220) then cHarf := chr(154) // Ü
else
if cHarf = chr(222) then cHarf := chr(158) // Ş
...
...
我需要类似的从Flutter到套接字的转换以及从套接字到Flutter的转换。
如何在Dart和Flutter上将拉丁语转换为Ibm字符集?
还是如何在飞镖或颤动中使用类似的字符转换?
更新:
我尝试将字符转换为字节,如下所示,但不适合ibm类型。 ibm char(240)将转换为拉丁字符(167)。输出甚至不匹配。
List<String> letters = [ 'c', 'ç', 'g', 'ğ', 'ı', 'i', 'o', 'ö', 's', 'ş', 'u', 'ü' ];
for (num i=1; i < 12; i++) {
var bytes = utf8.encode(letters[i].toString());
print(bytes) ;
}
输出:
[195, 167]
[103]
[196, 159]
[196, 177]
[105]
[111]
[195, 182]
[115]
[197, 159]
[117]
[195, 188]
Update-2;
我也找到了这些,但是我不确定如何转换为十六进制或UTF8,如下所示
以下是一些十六进制的字符代码以及它们在UTF-8中的编码方式:
Ç ç Ğ ğ İ ı Ö ö Ş ş Ü ü
Code: 00c7 00e7 011e 011f 0130 0131 00d6 00f6 015e 015f 00dc 00fc
UTF8: c3 87 c3 a7 c4 9e c4 9f c4 b0 c4 b1 c3 96 c3 b6 c5 9e c5 9f c3 9c c3 bc