UTF-8 sem BOM

180

Tenho arquivos javascript que precisam ser salvos em UTF-8 (sem BOM), toda vez que os converto no formato correto no Notepad ++ , eles são revertidos para UTF-8 com BOM quando os abro no Visual Studio. Como posso impedir que o VS2010 faça isso?

Outra pergunta: UTF-8 sem assinatura no Visual Studio é o mesmo que UTF-8 sem BOM?

kabaros
fonte
13
um arquivo salvo com (utf-8 sem BOM) é revertido para (utf-8 com BOM) .. esse é o problema
kabaros
A solução para o problema kabaros é simples - basta salvar o arquivo no visual studio usando o uft-8 sem BOM. Sim, é possível - como Keavon notou "O UTF-8 sem assinatura está próximo ao final da lista". Estranho que o utf-8 com assinatura esteja no começo e o utf-8 sem assinatura esteja quase no fim, mas pelo menos ele resolve esse problema frustrante.
Cyriel 11/01

Respostas:

227

Às vezes, a BOM ou a marca de ordem de bytes é bastante irritante. O Visual Studio não altera o arquivo, a menos que você o salve (como disse Hans).

E aqui está a solução para o seu problema: Se você deseja salvar um arquivo com outras codificações, selecione Salvar como e estenda o botão Salvar na caixa de diálogo de arquivo e selecione "Salvar com codificação". Ou, se você quiser se livrar dessa configuração permanentemente, basta abrir o menu Arquivo e selecionar "Opções avançadas de salvamento" e lá você deve selecionar "UTF-8 sem assinatura" (e isso também respondeu à sua última pergunta :). Sim "UTF-8 sem assinatura" é o mesmo que sem BOM.

Dave81
fonte
11
Eu queria saber se há uma opção para habilitar isso por padrão para todos os arquivos.
Mihai
3
Ele salvou o arquivo corretamente quando escolhi "Salvar com codificação", mas não vejo "Opções avançadas de salvamento" no menu Arquivo, independentemente do tipo de arquivo que tenho aberto no editor. Hm ...
Chris Jaynes
20
@ChrisJaynes clique com o botão direito do mouse na barra de menus, em um local aberto, depois clique em personalizar ... comandos ... (*) menu: Arquivo ... [Adicionar comando] ... adicione as "Opções avançadas de salvamento" que coloquei logo acima de "Salvar seleção"
Tracker1 09/07/12
4
Bem, eu não tenho a entrada "UTF-8 sem assinatura" ... qual é o problema então?
Marco Klein
14
Nota: UTF-8 sem assinatura está próximo ao final da lista.
Keavon
29

Agora com fotos.

  1. Vá para File-> Save As.

    Arquivo / Salvar como

  2. Em seguida, no botão Salvar, clique no triângulo e clique em Save with Encoding....

    Salvar com codificação

  3. Clique em ok para substituir o arquivo e, na lista de codificações, encontre UTF-8 Without signature-> Clique em OK.

    UTF-8 Sem assinatura

Espero que isso poupe algum tempo.

Matas Vaitkevicius
fonte
26

Eu criei a extensão Fix File Encoding que impede o Visual Studio 2010+ de adicionar BOM aos arquivos UTF-8.

Sergey Vlasov
fonte
1
Obrigado por esse plugin! Deve haver outra maneira de especificar os tipos de arquivo, além de usar uma expressão regular nas configurações correspondentes aos sufixos de arquivo. Além disso, o plug-in atua apenas nos arquivos quando eu os salvo, quando eu crio um javascript, ele inicialmente possui uma lista técnica (3 bytes adicionados).
Anders Lindén 22/01
6

Infelizmente isso não funciona com arquivos csproj. Não há "Opção de gravação avançada" e mesmo que você tenha definido como "UTF-8 sem assinatura" para um arquivo cs, os arquivos csproj ainda são salvos na BOM. Se você usa o VSS, ele ainda reclama dos arquivos do projeto.

Wray
fonte
Talvez você deva passar do VSS para o SVN. Lembro-me de ver uma ferramenta que pode fazer a conversão para você. O SVN é gratuito e, por um pequeno preço, você pode conectar o plug-in visual do SVN ao seu visual studio e usar o SVN diretamente da interface do usuário.
Dave81
7
"Talvez você deva passar do VSS para o SVN." Que tipo de sugestão é essa? A maioria de nós que trabalha com software corporativo não escolhe nosso sistema de controle de origem. O SVN possui problemas que foram o que motivou a criação do git, porque eles estavam fartos do SVN.
Shiva
4

UTF-8 - Padrão "Salvar como" (sem assinatura) - Solicitação para incluir o padrão para UTF sem assinatura

O VS 2017 suporta nativamente o EditorConfig, portanto, uma solução recomendada é adicionar .editorconfigarquivo à sua base de código e definir charset => utf-8. Depois que você salvar um arquivo, ele será salvo como UTF-8 sem BOM.

Dave Anderson
fonte
Temo VS 2017 continua a não apoiar charsetem .editorconfig github.com/editorconfig/editorconfig-visualstudio/issues/...
BlazingFrog
2

Para o vs2010 c ++, haverá problemas com o UTF8 sem BOM, quando os arquivos de origem contiverem caracteres de vários bytes (por exemplo, chinês).

Esses caracteres não serão reconhecidos corretamente sem a BOM e resultarão em falha na conformidade.

Martin Wang
fonte
porque no Windows sem BOM do arquivo será assumida ter codificação ANSI, por isso vai ser quebrado
phuclv
2

Recentemente, encontrei esta pequena ferramenta de linha de comando que adiciona ou remove a lista técnica em arquivos codificados UTF-8 arbitrários: UTF BOM Utils ( novo link no github)

Pouco inconveniente, você pode baixar apenas o código-fonte C ++ simples. Você precisa criar o makefile (com o CMake , por exemplo) e compilá-lo sozinho, os binários não são fornecidos nesta página. No entanto, para um desenvolvedor de software, isso não deve ser problema.

Wernfried Domscheit
fonte
1

Mesmo com a solução de Dave81, a Comunidade do Visual Studio 2015 ainda estava revertendo meu arquivo para UTF8-BOM toda vez que eu salvo esse arquivo html.

Quando criei esse arquivo html, cliquei com o botão direito do mouse no projeto e selecionei "Adicionar" e adicionei um arquivo HTML.

Por padrão, o Visual studio incluirá uma <meta charset="utf-8" />marca no seu arquivo HTML.

Simplesmente remover a etiqueta e aplicar a solução do Dave81 fez com que o problema desaparecesse de verdade neste momento.

Parece que o Visual Studio analisa seu arquivo html e, quando vê essa tag, converte o arquivo em UTF8-BOM sem levar em consideração o formato do arquivo original (UTF-8 sem BOM).

Eu teria feito um comentário diretamente sob a solução de Dave81, mas não tinha pontos suficientes para fazê-lo ...

Jonny
fonte
0

Para o Código do Visual Studio, faça o seguinte:

  1. No canto inferior direito, selecione a codificação atual insira a descrição da imagem aqui
  2. Nas opções, selecione Salvar com enconding insira a descrição da imagem aqui
  3. Nas opções, selecione UTF-8 insira a descrição da imagem aqui
Mahesh
fonte
O código VS e VS são muito diferentes. Esta pergunta é sobre VS
phuclv
Embora a pergunta fosse para o VS e você respondeu pelo VScode, o que resolveu meu problema, portanto, foi votado com êxito
Ashu
-2
UTF8Encoding utf8EmitBOM = new UTF8Encoding(false);
StreamWriter  sw = new StreamWriter(Path.Combine(sourcefilePath, fileName), false, utf8EmitBOM);

Este código criará um arquivo em UTF-8 sem BOM

Jugendra Singh
fonte
a questão é sobre a codificação ao salvar um arquivo de código-fonte no IDE, não sobre como definir a codificação ao escrever algum arquivo em código C #
phuclv