Ficheros en vb.net

Hola, estoy desarrollando una pequeña aplicación que lee datos de una base de datos SQL Server y los va escribiendo en un fichero. El problema que tengo, es que al leer las ñ o las vocales acentuadas, en el fichero me escribe otros símbolos distintos, aparte de que en vez de escribirme un sólo símbolo me escribe dos, por lo que me desalinea el texto. Me gustaría saber si hay alguna forma para que lo escriba en el fichero tal cual está en la base de datos. Un saludo y muchas gracias.

2 Respuestas

Respuesta
1
Seguramente el problema es que la base de datos guarda los datos en utf-8 y el archivo los graba en unicode.
Puedes encontrar más información en :
http://support.microsoft.com/default.aspx?scid=KB;en-us;q232580
Respuesta
1
Claro que lo hay. Para que te haga lo que tú quieres el problema que tienes es que la letra ñ o los acentos, por ponerte 1 ejemplo, en chino no existen, pero necesitan utilizar el mismo espacio de bytes para su juego de caracteres (no sé si me sigues). La historia está en que tienes que hablar en el mismo juego de caracteres que habla tu base de datos, porque tu error debe de ser que codifican los datos en juegos de caracteres distintos. Una solución fácil (relativamente) es usar la función writebintohex o programartela. Esta función codifica los datos de binario a hexadecimal y readbintohex hace lo contrario. Para que no haya errores a este efecto lo que tú puedes hacer es almacenar los datos en la bd en hexadecimal en lugar de en binario, y cuando leas transformarlos a binario. Este método se llama marshall. Así no tendrás problemas con el idioma. tengo la función escrita en c++ si quieres:
int HexToBin(BYTE * Buffer,LPCTSTR HexStr,long Longitud)
{
LPCTSTR HexAlpha="0123456789ABCDEF";
BYTE Result=0;
BYTE j;
for (int i=0;i<Longitud;i++)
{
TCHAR hola=HexStr;
for (j=0;j<16;j++)
{
if (hola==HexAlpha[j])
{
break;
}
}
if ((i % 2)==0)
//4 bits de mayor peso
{
Result=j*16;
}
else //4 bits de menor peso
{
Result=Result+j;
int k =i/2;
Buffer[k]=Result;
}
} //for
return 0;
}
Espero que te haya sido de ayuda. Saludos y perdón por tardar en contestar. Vacaciones... tu sabes...
1 saludo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas