Как преобразовать RichText, который включает Unicode в обычный текст? - PullRequest
0 голосов
/ 08 апреля 2019

RichText:

{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Times New Roman;}}
\viewkind4\uc1\pard\f0\fs24 I have an apple \u20320?\u22909?\par
}

Ожидается после преобразования:

У меня есть яблоко 100

Фактически после конвертации:

у меня есть яблоко ??

Вот мое изменение кода:

RichText::In(const wchar_t* text)
{
    CreateTextServices(NULL, &TextHost, &TextServices);

    if (TextServices)
    {
        WPARAM format = SF_RTF | SF_UNICODE;
        long result = 0;
        StreamIn stream(text);
        textServicesInterface->TxSendMessage(EM_STREAMIN, format, (LPARAM)&stream, &result);
    }
}

String RichText::Out() 
{
    WPARAM format = SF_TEXT;
    String result;
    ITextServicesPtr textServicesInterface = TextServices;
    if (textServicesInterface)
    {
        long read = 0;
        StreamOut stream;
        textServicesInterface->TxSendMessage(EM_STREAMOUT, format, (LPARAM)&stream, &read);
        result = stream.Text;
    }
    return result;
}

class Stream:
    public EDITSTREAM
{
public:
    Stream():
        Index(0)
    {
        ZeroMemory(static_cast<EDITSTREAM*>(this), sizeof(EDITSTREAM));
        dwCookie = (DWORD_PTR)this;
    }

    CAtlStringA Text;
    size_t Index;
};

class StreamOut:
    public Stream
{
public:
    StreamOut()
    {
        pfnCallback = CallBack;
    }

private:
    static DWORD CALLBACK CallBack(DWORD_PTR cookie, unsigned char* buffer, long maximumBytes, long *bytesCopied)
    {
        if (NULL != bytesCopied)
        {
            *bytesCopied = 0;
            Stream* stream = (Stream*)cookie;
            if (NULL != stream)
            {
                buffer[maximumBytes] = '\0';
                stream->Text.Insert(stream->Text.GetLength(), (const char*)buffer);
                *bytesCopied = maximumBytes;
                return 0;
            }
        }
        return 1;
    }
};

Может кто-нибудь объяснить мне, в чем проблема с моим кодом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...