Ir para conteúdo
  • Cadastre-se

dev botao

  • Este tópico foi criado há 2793 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Primeiramente boa tarde a todos!

já realizei diversas buscas, inclusive aproveitei trechos de fonte aqui do fórum, porem meu problema persiste então ai vai,
uso o AcbrMonitorPlus 0.1.11a com comunicação via TCP/IP a uma aplicação C#.Net, porem quando trato o retorno os acentos retornam com erro do tipo "Servi??o em opera???o", já tentei tratar como ASCII, Latin e UTF-8 e obtive o mesmo resultado. Segue o trecho de código que utilizo para o recebimento do retorno(retirado dos exemplos):

 int i = -1;
i = stream.Read(data, 0, 1);
var letra = "";
responseData = String.Empty;
while (letra != ((char)3).ToString())
{   i = stream.Read(data, 0, 1);
letra = System.Text.Encoding.UTF8.GetString(data, 0, i);//
if (letra != ((char)3).ToString())
{ responseData += letra; }
}


Fazendo o debug do código percebi que logo na linha 7 do código acima o caractere retornado é o "?" em casos de acentuação ou "ç". Gostaria de alguma dica dos amigos sobre como resolver esse pequeno problema

Agradeço desde já

Maylon Macedo

Postado (editado)

Utilizando ANSI o caracter mudou de "?" para "§Ã§", retirei o encode obtem o texto "puro" e o resultado foi igual ao ANSI

Editado por Maylon Macedo
  • Fundadores
Postado

Parece tudo correto nos fontes... adicione o Log do monitor, demonstrando o comando que você enviou e a resposta dele...

Certifique-se de que a caixa "ANSI", não esteja marcada

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Postado

Segue anexo dois arquivos .txt, sendo o "log.txt" gerado pelo AcbrMonitorPLUS e "retorno.txt" gerado pelo trecho de código abaixo apresentado. No arquivo "log.txt" o retorno está correto porem no gravado pela aplicação não, quando debugado este código(na linha "letra = Encoding.UTF8.GetString(data, 0, i);" ) o caractere retornado nos casos especiais é o 63 da tabela ASCII.

me certifiquei e a caixa "ANSI" não esta marcada.

 

using (var cliente = new TcpClient())
{
	String responseData = String.Empty;
	Byte[] data = new Byte[512];
	cliente.Connect(Global.CaminhoSAT, 3434);
	comando += "\r\n.\r\n";
	NetworkStream stream = cliente.GetStream();
	Int32 bytes = stream.Read(data, 0, data.Length);
	responseData = Encoding.ASCII.GetString(data, 0, bytes);
	data = Encoding.ASCII.GetBytes(comando);
	stream.Write(data, 0, data.Length);
	stream.Flush();

	int i = -1;
	i = stream.Read(data, 0, 1);
	var letra = "";
	responseData = String.Empty;

    while (letra != ((char)3).ToString())
    {
		i = stream.Read(data, 0, 1);                        
		letra = Encoding.UTF8.GetString(data, 0, i);                        
		if (letra != ((char)3).ToString())
		{
    		responseData += letra; 
    	}	
	}                    
    retorno =  responseData;
    File.WriteAllText(@"c:\retorno", retorno);                    
    stream.Close();
    cliente.Close();                    
    return retorno;
}

 

log.txt

retorno.txt

  • Este tópico foi criado há 2793 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...