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?


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.


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.


26

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


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.


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.


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.


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.


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 ...


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

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


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.