Grupo,
Como prometí para todo aquel que lo necesite lo solucioné de la siguiente
manera.
El problema original era que tengo un campo en la tabla de Sql Server que
esta codificado en Chino y en los Windows en español, a pesar que el campo
se muestra en un rtf no aparece con caracteres chinos. Siendo que tanto el
Sql Server Management Studio, como el Word o el Wordpad si muestran los
caracteres correctos.
Una de las soluciones propuestas por Estela era habilitar los
caracteres asiáticos en el Windows, pero esto traía aparejado el problema
que se perdían las eñes y los acentos y eran reemplazados por caracteres
chinos. teniendo luego problemas de compilación si la pc era de desarrollo.
Bueno, observe que el Wordpad almacenaba la información en rtf, es decir de
la misma forma que yo la quería mostrar en vfp9 con el richtextbox
y descubrí también que el richtextbox tiene una propiedad donde se le puede
asignar el rtf para poder mostrar lo mismo que mostraba el Wordpad, así que,
lo único que debia hacer era traducir los caracteres chinos de Sql a formato
rtf y asignárselo al control.
Por otra parte este texto
收银机 电脑式centra 整套
se codifica así en rft
{\rtf1\ansi\ansicpg1252\deff0\deflang11274{\fonttbl{\f0\fmodern\fprq6\fcharset134
SimSun;}{\f1\fswiss\fcharset0 Arial;}}
\viewkind4\uc1\pard\lang2052\f0\fs20\'ca\'d5\'d2\'f8\'bb\'fa
\'b5\'e7\'c4\'d4\'ca\'bdcentra \'d5\'fb\'cc\'d7\lang11274\f1\par
}
y los caracteres que importan están ubicados exactamente aquí
\'ca\'d5\'d2\'f8\'bb\'fa \'b5\'e7\'c4\'d4\'ca\'bdcentra \'d5\'fb\'cc\'d7
Según la documentación rtf de Microsoft para Office 2003 \'ca significa el
caracter ascii ca es decir el caracter 202
Luego lo único que debía hacer era encontrar alguna función de Sql que me
pasara la cadena a binario y voila encontré esto
CONVERT(binary(50), descrip1, 0)
en realidad mi campo es descrip1 y le puse 50 porque tiene un ancho de 50
caracteres. Esta expresión en el select me devuelve
0xCAD5D2F8BBFA20B5E7C4D4CABD63656E74726120D5FBCCD70000000000000000000000000000000000000000000000000000
pero como cadena alfanumérica y si se fijan cada par de letras corresponden
a la expresión del rtf salvo por la contrabarra y el apostrofe, así que para
armar el rtf simplemente utilizo la siguiente función
LPARAMETERS cTextoBin
LOCAL lcParte1,lcParte2,lcParteCentral
lcParte1="{\rtf1\ansi\ansicpg1252\deff0\deflang11274{\fonttbl{\f0\fmodern\fprq6\fcharset134
SimSun;}{\f1\fswiss\fcharset0 Arial;}}\viewkind4\uc1\pard\lang2052\f0\fs20"
lcParteCentral=""
FOR lnCar=1 TO LEN(cTextoBin)
lcParteCentral=lcParteCentral+"\'"+SUBSTR(TRANSFORM(ASC(SUBSTR(cTextoBin,lnCar,1)),"@0"),9)
NEXT lnCar
lcParte2="\lang11274\f1\par}"
RETURN (lcParte1+lcParteCentral+lcParte2)
y esta es la asignación
lcSql="Select CONVERT(binary(50), descrip1, 0) descripbin from Productos
WHERE codbar='"+cProductos.codbar+"'"
loRsAuxProd = Thisform.ConexionActual.Execute(lcSql)
Thisform.RsToCursor(loRsAuxProd,"cAuxProd")
loRsAuxProd=.Null.
ThisForm.oleDescrip.TextRtf=Thisform.ArmaRtf(cAuxProd.DescripBin)
Valió la pena la investigación, gracias a todos y Feliz Navidad
Pancho
Córdoba