Reputation:
I am using aqueduct web api framework to support my flutter app. In my api backend I need to connect local network socket services. My problem is that I can't return the exact string (in tr). So, How can I convert string to utf8 in Dart?
Example:
@httpGet
Future<Response> getLogin() async {
Socket.connect('192.168.1.22', 1024).then((socket) async {
socket.listen((data) {
// Expected return is: 1:_:2:_:175997:_:NİYAZİ TOROS
print(new String.fromCharCodes(data).trim());
xResult = new String.fromCharCodes(data).trim();
print("xResult: $xResult");
}, onDone: () {
print("Done");
socket.destroy();
});
socket.write('Q101:_:49785:_:x\r\n');
});
return new Response.ok(xResult);
}
The return is not in TR-tr language format.
Return text looks like:
**1:_:2:_:175997:_:NÝYAZÝ TOROS**
Correct must be:
**1:_:2:_:175997:_:NİYAZİ TOROS**
UPDATE:
xResult = new String.fromCharCodes(data).trim();
print(xResult);
responseBody = xResult.transform(utf8.decoder);
print(responseBody);
I can print the xResult
but cannot print the responseBody
after trying convert to UTF8
Upvotes: 28
Views: 99347
Reputation: 584
import 'dart:convert';
const originalString = 'En Español';
final decodedString = utf8.decode(originalString.codeUnits);
print(decodedString); // prints 'En Español'
Just an alternative in case you have to convert strings.
Upvotes: 9
Reputation: 4387
Useful related convertions:
import 'dart:convert';
import 'dart:typed_data';
// Text to byte:
List<int> byteIntList = utf8.encode('yourTextHere');
// Text to Uint8List:
Uint8List myUint8List = utf8.encode('yourTextHere') as Uint8List;
// List<int> to Uint8List:
Uint8List myUint8List = Uint8List.fromList(byteIntList);
Upvotes: 0
Reputation: 693
To/from Uint8List
//Uint8List to String
Uint8List bytes = utf8.encode(String s) as Uint8List;
//String to Uint8List
String s = utf8.decode(bytes.toList());
Upvotes: 0
Reputation: 1105
This is not the solution for your specific case but relative to the title.
If your string is a Uri, use:
final decodedUri = Uri.decodeFull('your-string-uri')
Android string Uri is an example use case, here is a demo before and after using Uri.decodeFull()
:
Upvotes: 1
Reputation: 7343
Try to use utf-8 convertion Use this code
final message = utf8.decode(data);
Instead of this
final message = String.fromCharCodes(data);
import
import 'dart:convert';
void handleConnection(Socket client) {
print('Connection from'
' ${client.remoteAddress.address}:${client.remotePort}');
// listen for events from the client
client.listen(
// handle data from the client
(Uint8List data) async {
await Future.delayed(Duration(seconds: 1));
final message = utf8.decode(data);
// final message = String.fromCharCodes(data);
int length = messageWidgets.length;
Widget padding2 = Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Expanded(
flex: 1,
child: GestureDetector(
onLongPress: () {
_copy(message);
},
onDoubleTap: () {
setState(() {
messageWidgets.removeAt(length);
});
},
child: Container(
padding: EdgeInsets.all(8.0),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: Color(0xDD44871F),
),
child: Stack(
children: <Widget>[
Column(
// direction: Axis.vertical,
children: [
Text("${client.remoteAddress.host}::-",
style: TextStyle(color: Colors.black87)),
Text("${message}",
style: TextStyle(color: Colors.black87)),
],
)
],
),
)),
),
Expanded(
flex: 1,
child: Container(),
),
],
),
);
setState(() {
messageWidgets.add(padding2);
});
},
// handle errors
onError: (error) {
print(error);
setMwidget(error);
client.close();
},
// handle the client closing the connection
onDone: () {
print('Client left');
client.close();
},
);
}
Upvotes: 2
Reputation: 1801
utf8.decode(stringData.runes.toList()),
This could be used to get the UTF-8 in flutter. here the stringData string will contain the necessary data with UTF-8 content.
Upvotes: 23
Reputation: 657138
import 'dart:convert' show utf8;
var encoded = utf8.encode('Lorem ipsum dolor sit amet, consetetur...');
var decoded = utf8.decode(encoded);
See also https://api.dartlang.org/stable/1.24.3/dart-convert/UTF8-constant.html
There are also encoder and decoder to be used with streams
File.openRead().transform(utf8.decoder).
See also https://www.dartlang.org/articles/libraries/converters-and-codecs#converter
Upvotes: 54