ページ「リボルビング払い」と「C#でUrlEncodeとUrlDecode」の間の差分

提供: MonoBook
(ページ間の差分)
ナビゲーションに移動 検索に移動
imported>Administrator
 
imported>Administrator
 
1行目: 1行目:
'''リボルビング払い'''(通称:リボ払い)とは、返済回数ではなく、毎月の最小返済金額を決めて返済する方式をいう。
+
C#というか[[.NET]]にはUrlEncodeとUrlDecodeの統一的な方法がない。標準的に行う方法は、バージョンごと、プラットフォームごとに方法が異なりすぎて悲惨なことになっている。
  
毎月の返済は最小返済金額以上であればよく、最小返済金額でも全額でもよい。このうち最小返済金額は「[[ミニマムペイメント]]」と呼ばれる。また借りた翌月に1回で全額返済することを「[[リボ一括]]」という。
+
こんなもんStringクラスの拡張メソッドでいいだろ。アホか。
  
== 種類 ==
+
<syntaxhighlight lang="csharp">
リボ払いとひとことで言っても、毎月支払う一定額がどのように決められるかによっていくつかの種類に分けられる。
 
*[[元利定額リボルビング方式]]
 
*[[元金定額リボルビング方式]]
 
*[[元利定率リボルビング方式]]
 
*[[元金定率リボルビング方式]]
 
*[[残高スライド元利定額リボルビング方式]]
 
*[[残高スライド元金定額リボルビング方式]]
 
*[[残高スライド元利定率リボルビング方式]]
 
*[[残高スライド元金定率リボルビング方式]]
 
凄い難しそうに思えるが「元利と元金」「定額と定率」「残高スライド'''」'''の3つを理解すれば簡単である。
 
  
== 関連項目 ==
+
 
* [[リボルビング払い]]
+
    static class StringExtensions
* [[リボ払い専用クレジットカード]]
+
    {
* [[リボ一括]]
+
        public static string UrlEncode(this string str, Encoding enc)
* [[ミニマムペイメント]]
+
        {
* [[リボ天]]
+
            var rt = new StringBuilder();
 +
            foreach (byte i in enc.GetBytes(str))
 +
            {
 +
                if (i == 0x20)
 +
                {
 +
                    rt.Append('+');
 +
                }
 +
                else if ((0x30 <= i && i <= 0x39) || (0x41 <= i && i <= 0x5a) || (0x61 <= i && i <= 0x7a))
 +
                {
 +
                    rt.Append((char)i);
 +
                }
 +
                else
 +
                {
 +
                    rt.Append("%" + i.ToString("X2"));
 +
                }
 +
            }
 +
            return rt.ToString();
 +
        }
 +
 
 +
        public static string UrlDecode(this string str, Encoding enc)
 +
        {
 +
            var bytes = new List<byte>();
 +
            for (int i = 0; i < str.Length; i++)
 +
            {
 +
                char c = str[i];
 +
                if (c == '%')
 +
                {
 +
                    bytes.Add((byte)int.Parse(str[++i].ToString() + str[++i].ToString(), System.Globalization.NumberStyles.HexNumber));
 +
                }
 +
                else if (c == '+')
 +
                {
 +
                    bytes.Add((byte)0x20);
 +
                }
 +
                else
 +
                {
 +
                    bytes.Add((byte)c);
 +
                }
 +
            }
 +
            return enc.GetString(bytes.ToArray(), 0, bytes.Count);
 +
        }
 +
    }
 +
 
 +
</syntaxhighlight>
 +
 
 +
[[category: .NET]]

2018年8月14日 (火) 02:43時点における版

C#というか.NETにはUrlEncodeとUrlDecodeの統一的な方法がない。標準的に行う方法は、バージョンごと、プラットフォームごとに方法が異なりすぎて悲惨なことになっている。

こんなもんStringクラスの拡張メソッドでいいだろ。アホか。

    static class StringExtensions
    {
        public static string UrlEncode(this string str, Encoding enc)
        {
            var rt = new StringBuilder();
            foreach (byte i in enc.GetBytes(str))
            {
                if (i == 0x20)
                {
                    rt.Append('+');
                }
                else if ((0x30 <= i && i <= 0x39) || (0x41 <= i && i <= 0x5a) || (0x61 <= i && i <= 0x7a))
                {
                    rt.Append((char)i);
                }
                else
                {
                    rt.Append("%" + i.ToString("X2"));
                }
            }
            return rt.ToString();
        }

        public static string UrlDecode(this string str, Encoding enc)
        {
            var bytes = new List<byte>();
            for (int i = 0; i < str.Length; i++)
            {
                char c = str[i];
                if (c == '%')
                {
                    bytes.Add((byte)int.Parse(str[++i].ToString() + str[++i].ToString(), System.Globalization.NumberStyles.HexNumber));
                }
                else if (c == '+')
                {
                    bytes.Add((byte)0x20);
                }
                else
                {
                    bytes.Add((byte)c);
                }
            }
            return enc.GetString(bytes.ToArray(), 0, bytes.Count);
        }
    }