Unicode character to readable format



  • Hi
    I have received Unicode character like "\u000B\u000E\u000E\u001E\u000E\u000E\u000E\u0013\u000E\u0014\u000E\n"

    I need to convert this in to readable format.


  • Qt Champions 2018

    @eswar What do you mean with "readable". These characters are outside the letter/digit range and therefore cannot be displayed.

    Do you want to dump them as hex? Which type is the variable that stores that characters?



  • Look at the UTF-8 encoding table. What you have are control chacters.



  • Do you want to do something like "show codes" that used to be in Wordperfect back in the 90s?

    You might have to define your own unicode set to allow display of characters in a custom way. I have no idea what it takes to do such a thing.



  • or... change the font that has control characters as visible characters.

    I actually want this for Qt. That way I can see the trailing spaces at the end of a line of code.

    Edit:
    Found it!
    In Qt Creator:
    Options->Text Editor->Display(tab)->Visualize Whitespace



  • @aha_1980

    Thanks for the reply. I need to convert this Unicode to string (Readble format).


  • Lifetime Qt Champion

    Hi,

    That's the catch: these are control characters, they don't have a visual representation. You will to replace them yourself with something if you want to make them "readable".



  • @SGaist

    Thanks for the reply.

    These are escape sequence Unicode data receiving from UART. I need to convert these unicode data to Qstring.


  • Lifetime Qt Champion

    That's what we are trying to make you understand: they already are in your QString but they have no visual representation. If you print the length of your string you'll see that it's not empty. You can process that string for whatever you need but you can't print anything readable.


  • Moderators

    @eswar said in Unicode character to readable format:

    I need to convert this Unicode to string (Readble format).

    Please tell us:

    1. Why do you want to make the escape sequence "readable"?
    2. Which Readable Format do you want to use? (there are many possible readable formats)
    3. What do you want the final string to look like? Type it out for us.


  • Hi @JKSH

    For your information, the application read the weighing scale data through serial port. if i ran the application same application in windows machine, i will get the correct data .
    Refer the attached image (0_1548221574250_windows.png image url)
    if i ran the application in the linux machine, i will get the escape sequence data only.
    Refer image (0_1548221760382_Linux.png link url) .
    Both are same application screen shot with different machine. I dint know, Why it is behave in linux environment. If it is uni coded character in linux, i need to covert the character similar to the windows output.


  • Qt Champions 2018

    @eswar The data you received is pure ASCII - it will work in Linux too if handled correctly.

    Please show the code where you receive the data and how you store it in variables.



  • Hi

    Check the sample code for receiving data in the serial port.

    connect(port,&QSerialPort::readyRead,this,&WeighingMachine::readData);

    buffer is QByteArray datatype.

    void WeighingMachine::readData()
    {
    QString Time = QTime::currentTime().toString("hh:mm:ss.zzz");

    while(!(port->atEnd()))
    {
        buffer.append(port->readAll());
    
        int i =0;
        QByteArray temp;
        int len = buffer.length();
    

    #ifdef QT_DEBUG
    qDebug()<<"Buffer: "<< QString::fromUtf8(buffer);;
    #endif

        while(i<len)
        {
    
            if ((buffer.at(i)== '\r') && (temp.length() > 0))
            {
                QString str(temp);
                QString Find = "\n";
                QString replace = "";
                str.replace(str.indexOf(Find),Find.size(),replace);
                weighingMachineData = Time +"," +str;
    

    #ifdef QT_DEBUG
    // qDebug()<<"Weighing Data: "<<weighingMachineData;
    #endif

                temp.clear();
            }
            else
            {
                temp.append(buffer.at(i));
            }
    
            i++;
        }
        buffer.clear();
        buffer.append(temp);
        temp.clear();
    }
    

    }

    For your information, I also receive the same data in cutecom terminal also.


  • Qt Champions 2018

    @eswar said in Unicode character to readable format:

    #ifdef QT_DEBUG
    qDebug()<<"Buffer: "<< QString::fromUtf8(buffer);;
    #endif

    Please change that to: qDebug() << "Buffer:" << buffer << "hex:" << buffer.toHex(); and post the output here.

    Thanks.



  • @aha_1980

    Please refer the following image
    0_1548234468992_linux1.png


  • Qt Champions 2018

    @eswar That is really strange - all these characters are outside the visible ASCII range.

    • Do you have a documentation for the command set of the device you are talking with?
    • Can you repeat the last qDebug() tests in Windows?
    • Are you sure the serial parameters (baudrate, start, stop bits, parity) are correct in Linux?


  • Hi @aha_1980

    Please refer below images for windows output
    0_1548239849949_Windows.JPG

    serial parameters are same for both linux and windows.
    In device documentation, transmission data format is mentioned as 8 bit ASCII format.


  • Qt Champions 2018

    @eswar Something is terribly wrong in Linux - I'd blame the serial parameters.

    You need to find the culprit before you can continue.

    Best start with a terminal program in Linux and see if you can receive the data correctly there.



  • @aha_1980

    Thanks for the support.

    Cutecom was also receive the same thing. So only i am not able to find the problem. Find below,
    0_1548240335682_cutecom.JPG


  • Qt Champions 2018

    @eswar

    Ok, so some more questions:

    • Is this Linux system a regular PC? Is it the same running Windows?
    • How do you connect the device to the PC? True RS-232, or USB (like FTDI?)
    • Is the external device properly powered?

  • Lifetime Qt Champion

    To add to @aha_1980, are you using the same device for development on both platforms ?



  • @aha_1980
    The linux system is regular laptop and windows is another laptop.
    The device is connected via USB( converter is used to covert the serial RS-232 to USB)
    The external device is properly powered using separate power supply.

    @aha_1980

    Same device is used to development on both platforms. The previous attached screenshot are taken same value in device for both linux and windows platform.


  • Lifetime Qt Champion

    Might be a silly question but did you try to connect it to another Linux station to see if it gives you the same results ?



  • Hi @SGaist and @aha_1980

    The issue was solved. Its related to linux OS problem. Its will work well with linux mint 19 OS. Before the earlier version of linux, the data received as encoded format only. In Linux mint 19, it will work fine in both cutecom as well as Qt application. Thanks for the support to solve the issue.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.