Текст берется из пардоксовского db файла.
Текст сохраняется в _bstr_t строке
_bstr_t strValue = pRst->Fields->Item[(_variant_t)index]->Value;
Т.е. CP866 строка сохраняется в юникодной и видимо здесь и есть проблема.
Длины одинаковые до и после перекодировки
Попробовал перекодировать так: Символы изменились в исходной и полученной строке, но толку то
char *pp;
pp=static_cast<const char *>(strValue);
Попробовал через stream с помощью GetCharset посмотреть кодировку. Выдает 0, т.е. ANSI (United States, Western Europe).
Накидал на VB. Переводит. осталось понять как это в С++ перенести
Private Sub Form_Load()
Set Conn = CreateObject("ADODB.Connection")
ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Lisega;Extended Properties=Paradox 5.x;"
Conn.CursorLocation = adUseClient
Conn.Open ConnectionString
Dim i As Integer
Set rs = Conn.Execute("SELECT K_FREE_HG_TEXT1 FROM KONSTZ8.DB")
Dim str As String, dest As String
str = rs.Fields(0)
dest = ChangeTextCharset(str, "Windows-1251", "iso8859-1")
MsgBox dest
rs.Close
Conn.Close
End Sub
Function ChangeTextCharset(ByVal txt$, ByVal DestCharset$, Optional ByVal SourceCharset$) As String
On Error Resume Next: Err.Clear
With CreateObject("ADODB.Stream")
.Type = 2: .Mode = 3
If Len(SourceCharset$) Then .Charset = SourceCharset$
.Open
.WriteText txt$
.Position = 0
.Charset = DestCharset$
ChangeTextCharset = .ReadText
.Close
End With
End Function