[PyQt] PyQt cannot trasform QString into str when reading emoji	symbol from QClipboard
    Ilya Kulakov 
    kulakov.ilya at gmail.com
       
    Thu Jan 22 12:13:49 GMT 2015
    
    
  
I'm testing the following symbol: 😷
I wrote simple Objective-C application to check how native frameworks would encode this into UTF-8. Here is the code:
    NSString *str = [[NSPasteboard generalPasteboard] stringForType:@"public.utf8-plain-text"];
    const char *cstr = str.UTF8String;
    size_t i = 0;
    while (cstr[i] != 0)
    {
        NSLog(@"0x%x", cstr[i]);
        ++i;
    }
Then I wrote a simple Qt app to ensure that returned QString has the same bytes:
    QClipboard *clipboard = QApplication::clipboard();
    QString originalText = clipboard->text();
    QByteArray bytes = originalText.toUtf8();
    for (size_t i = 0; i < bytes.count(); ++i)
        qDebug("0x%x", bytes.at(i));
In both apps output is:
    0xfffffff0
    0xffffff9f
    0xffffff98
    0xffffffb7
However when I extract text by using PyQt (python 3):
    QApplication.clipboard().text()
returned str consists of 1 string and cannot be encoded to UTF-8 due to surrogate '\ud83d' at position 0.
However, as you can see above, there is no such symbol.
That raises 2 questions:
1. How this symbols was introduced
2. How to handle this in an application
The original bug report we received was from our Windows user, but we were not able to reproduce it there. However it's pretty easy to reproduce on Mac OS X.
Best Regards,
Ilya Kulakov
    
    
More information about the PyQt
mailing list