Share via


SYSLIB0001: la codificación UTF-7 no es segura

La codificación UTF-7 ya no se usa de forma generalizada en la mayoría de las aplicaciones, y muchas especificaciones ahora prohíben su uso en el intercambio. En ocasiones, también se usa como vector de ataque en aplicaciones que no anticipan el encuentro de datos codificados en UTF-7. Microsoft advierte contra el uso de System.Text.UTF7Encoding, porque no proporciona detección de errores.

Por tanto, las siguientes API se han marcado como obsoletas a partir de .NET 5. El uso de estas API genera una advertencia SYSLIB0001 en tiempo de compilación.

Soluciones alternativas

  • Si usa Encoding.UTF7 o UTF7Encoding en su propio protocolo o formato de archivo:

    Cambie al uso de Encoding.UTF8 o UTF8Encoding. UTF-8 es un estándar del sector y es compatible con numerosos lenguajes, sistemas operativos y entornos de ejecución. El uso de UTF-8 facilita el mantenimiento futuro del código y hace que sea más interoperable con el resto del ecosistema.

  • Si va a comparar una instancia de Encoding con Encoding.UTF7:

    Considere mejor la posibilidad de realizar una comprobación con la página de códigos UTF-7 conocidos, que es 65000. De esta manera, evita la advertencia y también se controlan algunos casos extremos, como, por ejemplo, si alguien llamó a new UTF7Encoding() o incluyó el tipo en una subclase.

    void DoSomething(Encoding enc)
    {
        // Don't perform the check this way.
        // It produces a warning and misses some edge cases.
        if (enc == Encoding.UTF7)
        {
            // Encoding is UTF-7.
        }
    
        // Instead, perform the check this way.
        if (enc != null && enc.CodePage == 65000)
        {
            // Encoding is UTF-7.
        }
    }
    

Supresión de una advertencia

Si tiene que seguir usando las API obsoletas, puede suprimir la advertencia en el código o en el archivo de proyecto.

Para suprimir solo una infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y luego volver a habilitar la advertencia.

// Disable the warning.
#pragma warning disable SYSLIB0001

// Code that uses obsolete API.
// ...

// Re-enable the warning.
#pragma warning restore SYSLIB0001

Para suprimir todas las advertencias SYSLIB0001 del proyecto, agregue una propiedad <NoWarn> al archivo del proyecto.

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
   ...
   <NoWarn>$(NoWarn);SYSLIB0001</NoWarn>
  </PropertyGroup>
</Project>

Para obtener más información, vea Suprimir advertencias.

Vea también