CARACTERES ANSI PATA UTF8

JCM0867 22/03/2016 12:44:18
#459657
Olá pessoal
fui mandar um arquivo de remessa para o banco sicoob e disseram que tinham caracteres acentuados e o arquivo texto não podia ser no formato ANSI
Como altero para o formato correto que nem sei qual é, Acredito que seja UTF8?

Gero texto usando [txt-color=#0000f0]StreamWriter[/txt-color]

Como Gero texto de forma simplificada:

[txt-color=#e80000]Dim strm As New IO.StreamWriter(RaizSistema + [Ô]\Remessa\[Ô] + NomeArquivoWeb + [Ô].rem[Ô])

TextoTrailer = [Ô]Meu texto[Ô]
strm.WriteLine(TextoTrailer)
strm.Close()[/txt-color]

Gerou texto 100%
e agora o que faço para não ser ANSI?
PERCIFILHO 22/03/2016 13:54:14
#459660
Veja se aqui tem alguma coisa que te ajuda, sei que está em C# mas podes converter.

https://social.msdn.microsoft.com/Forums/pt-BR/1b21d074-5100-4d6e-9605-4cc217ef2283/mudar-codificao-txt-ansi-para-utf8?forum=vscsharppt
KLINGER 22/03/2016 14:08:52
#459662
Segue módulo que uso em vb6:

Public Const UTF8 = 65001
Public Declare Function WideCharToMultiByte Lib [Ô]kernel32[Ô] (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long
Public Declare Function MultiByteToWideChar Lib [Ô]kernel32[Ô] (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As Long, ByVal cbMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long

[ô]
[ô]Converts Unicode to UTF8. It wraps the system call WideCharToMultiByte.
[ô]
Public Function UTF8_Encode_System(ByVal sStr As String) As String
Dim buffer As String
Dim length As Long

[ô]Get the length of the converted data.
length = WideCharToMultiByte(UTF8, 0, StrPtr(sStr), Len(sStr), 0, 0, 0, 0)

[ô]Ensure the buffer is the correct size.
buffer = String$(length, 0)

[ô]Convert the string into the buffer.
length = WideCharToMultiByte(UTF8, 0, StrPtr(sStr), Len(sStr), StrPtr(buffer), Len(buffer), 0, 0)

[ô]Access needs it in unicode?
buffer = StrConv(buffer, vbUnicode)

[ô]Chop of any crap.
buffer = Left$(buffer, length)

[ô]Return baby.
UTF8_Encode_System = buffer
End Function

[ô]
[ô]Converts UTF8 data into unicode. It wrapps the system call MultiByteToWideChar.
[ô]
Public Function UTF8_Decode_System(ByVal sStr As String) As String
Dim buffer As String
Dim length As Long

[ô]Get the length of the converted data.
length = MultiByteToWideChar(UTF8, 0, StrPtr(StrConv(sStr, vbFromUnicode)), Len(sStr), 0, 0)

[ô]Ensure the buffer is the correct size.
buffer = String$(length, 0)

[ô]Convert the data into the buffer.
length = MultiByteToWideChar(UTF8, 0, StrPtr(StrConv(sStr, vbFromUnicode)), Len(sStr), StrPtr(buffer), Len(buffer))

[ô]Chop off any crap.
buffer = Left$(buffer, length)

[ô]Return baby.
UTF8_Decode_System = buffer
End Function
JCM0867 22/03/2016 14:45:09
#459666
Achei em um lugar dessa maneira, basta fazer isso na criação do arquivo

Dim strm As New IO.StreamWriter(RaizSistema + [Ô]\Remessa\[Ô] + NomeArquivoWeb + [Ô].rem[Ô], [txt-color=#0000f0]False, System.Text.UTF8Encoding.UTF8[/txt-color])

Como verifico se o texto ficou em ANSI ou UTF8 para ver se deu certo?
GUIMORAES 22/03/2016 14:59:46
#459668
Resposta escolhida
Dim strm As New IO.StreamWriter(RaizSistema + [Ô]\Remessa\[Ô] + NomeArquivoWeb + [Ô].rem[Ô], False, System.Text.UTF8Encoding.UTF8)

TextoTrailer = [Ô]Meu texto[Ô]
strm.WriteLine(TextoTrailer)
strm.Close()

ou

Dim strm As New IO.StreamWriter(RaizSistema + [Ô]\Remessa\[Ô] + NomeArquivoWeb + [Ô].rem[Ô], False, Encoding.GetEncoding([Ô]iso-8859-1[Ô]))

TextoTrailer = [Ô]Meu texto[Ô]
strm.WriteLine(TextoTrailer)
strm.Close()

Para verificar, abra o arquivo no bloco de notas, clique em arquivo, salvar como, e verifique a codificação do arquivo
OCELOT 22/03/2016 16:13:31
#459676
Eu diria que o mais provável é que eles não aceitem arquivos com acento.

ANSI basicamente vai ser o encoding ISO-8859, no caso do Brasil mais especificamente o ISO-8859-1, que inclui os acentos (códigos ASC acima de 127), e eles provavelmente aceitam apenas ASCII, que é basicamente a mesma coisa só que apenas com os caracteres sem acento (códigos ASC do 0 ao 127), então eu diria que você deveria fazer exatamente como estava fazendo mas antes de gravar remover deveria remover os acentos e outros caracteres especiais
JCM0867 22/03/2016 17:20:23
#459678
O problema que eles querem acentuação na primeira linha
nas palavras [Ô]REME[txt-color=#e80000]Ç[/txt-color]A[Ô] e [Ô]COL[txt-color=#e80000]é[/txt-color]GIO[Ô]
As linhas de detalhes eu uma funçãozinha que tira acentuação. sem problema
JCM0867 22/03/2016 19:58:19
#459699
Vejam essas duas imagens, uma é do banco e outra aqui, mesmo com a alteração o arquivo do banco continua ANSI e o que mandei era UTF-8
Notei que todas as remessas de teste estavam UTF-8, não precisava de nenhuma alteração.
Não seria o servidor de email que está alterando o arquivo na hora de enviar ou receber? Eu uso o Live Mail 2012
Tópico encerrado , respostas não são mais permitidas