System.NotSupportedException: エンコードに使用できるデータがありません 1252 質問する

System.NotSupportedException: エンコードに使用できるデータがありません 1252 質問する

私はトラストコマースチュートリアル顧客が TC Trustee Host 支払いフォームを使用できるようにする支払いトークンを生成する方法について。開発チームからこのトークンを取得する方法の例を教えてもらいました。

using System;
using System.Net;
using System.IO;
using System.Text;
using System.Collections;
using System.Web;

/** @class TCToken
 * An example class for generating a TrustCommerce Trustee Token
 */
public class TCToken
{

    public static void Main(string [] args)
    {
        string custid = "123456";
        string password = "XXXXXX";
        try {
            // Adapted from http://www.west-wind.com/presentations/dotnetWebRequest/dotnetWebRequest.htm
            string gateway_post_address = "https://vault.trustcommerce.com/trustee/token.php";
            HttpWebRequest req = (HttpWebRequest) WebRequest.Create(gateway_post_address);

            // A sixty second timeout.
            req.Timeout = 60000;

            string post_data = "custid=" + HttpUtility.UrlEncode(custid) +
                                "&password=" + HttpUtility.UrlEncode(password);
            
            req.Method = "POST";
            byte [] buf = System.Text.Encoding.GetEncoding(1252).GetBytes(post_data);
            req.ContentLength = buf.Length;
            req.ContentType = "application/x-www-form-urlencoded";

            Stream s = req.GetRequestStream();
            s.Write(buf, 0, buf.Length);
            s.Close();

            HttpWebResponse rep = (HttpWebResponse) req.GetResponse();
            Encoding enc = System.Text.Encoding.GetEncoding(1252);
            StreamReader rs = new StreamReader(rep.GetResponseStream(), enc);

            string token = rs.ReadToEnd();

            Console.WriteLine(token);

            rep.Close();
            rs.Close();
        } catch (Exception e) {
            Console.WriteLine(e);
        }
    }
}

Visual Studio で新しいコンソール アプリケーションを作成し、このコードをコピーして、ユーザー名とパスワードを正しい資格情報に置き換えました。これを実行しようとすると、コンソールに次のエラーが表示されます。

System.NotSupportedException: エンコード 1252 に使用できるデータがありません。カスタム エンコードの定義については、Encoding.RegisterProvider メソッドのドキュメントを参照してください。System.Text.Encoding.GetEncoding(Int32 codepage)、TCToken.Program.Main(String[] args)、C:\Users\xxxx\source\repos\TCToken\TCToken\Program.cs:line 29

このエラーを Google で検索してみましたが、ほとんどの回答は私の理解を超えています。私は C# の専門家ではありません。

ベストアンサー1

ckuri の言うとおりです。念のため、ストリームを開く前に次のコード行が必要です (手順 2、3)。

System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);

ExcelDataReader - .NET Core に関する重要な注意事項

デフォルトでは、ExcelDataReader は .NET Core で NotSupportedException「エンコード 1252 に使用できるデータがありません。」をスローします。

修正するには、パッケージ System.Text.Encoding.CodePages に依存関係を追加し、アプリケーションの初期化中にコード ページ プロバイダーを登録するコードを追加します (Startup.cs 内など)。

System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);

これは、DOS 時代のコード ページでエンコードされたバイナリ BIFF2-5 Excel ドキュメント内の文字列を解析するために必要です。これらのエンコードは、完全な .NET Framework では既定で登録されていますが、.NET Core では登録されていません。

おすすめ記事