0

我有一个图像 & 当我转换为Base64使用JavaScriptand时C#,它给了我两个不同的值。这是什么原因?

JavaScript 代码

  function LoadSvg() {
            var main = document.getElementById('svgimg');
            var data = main.innerHTML;
            debugger;
            var base64blob = Base64.encode(data);
            alert(base64blob);
            var image2 = document.getElementById('Img2');
            image2.src = 'data:image/svg+xml;base64,' + base64blob;
        }

C# 代码

string val=litSvg.Text;
byte[] arr = Encoding.UTF8.GetBytes(val);
string toBaseVal = Convert.ToBase64String(arr);      
ExternalHtml = 
   "<img id=\"dfs\" src=\"data:image/svg+xml;base64," + toBaseVal + "\" />";

在 JavaScriptmain值和 c#val值是相同的。这是怎么发生的?如果我需要在 java 脚本中输出相同的值,我该怎么做?

编辑 :

值:

<svg xmlns='http://www.w3.org/2000/svg' version='1.1' width='470px' height='310px'><line x1='40' y1='10' x2='40' y2='250'style='stroke: rgb(0,0,0); stroke-width: 1' />...

主要价值:

 <svg id="svg-code" xmlns="http://www.w3.org/2000/svg" version="1.1" width="470px" height="310px"> <line x1="40" y1="10" x2="40" y2="250" style="stroke: rgb(0,0,0); stroke-width: 1"></line>

O/P 值:

base64blob:CiAgICAgICAgICAgICAgICA8.....

toBaseVal : PHN2ZyB4bWxucz0naHR0cDov ....

4

2 回答 2

1

问题是这里的空间。

从 svg 文件中删除前导和尾随空格。此外 - 也删除所有多余的空格,即。将 1+ 个空格折叠为一个空格并在您的 C# 中 - 像这样读取+转换您的文件:

byte[] arr = System.IO.File.ReadAllBytes(svf_file);
string toBaseVal = Convert.ToBase64String(arr);

不理会编码。

一个代码计算带有过多空格的base64,而另一个没有(因为它隐式删除它们)-阅读innerHTML

于 2013-11-05T10:42:37.190 回答
1

您的 Javascript 解码缓冲区在开头包含空格

LINEFEED SPACE SPACE SPACE < ...


$ echo "CiAgICAgICAgICAgICAgICA8" | base64 -d | hexdump -C -n 32
00000000  0a 20 20 20 20 20 20 20  20 20 20 20 20 20 20 20  |.               |
00000010  20 3c                                             | <| 

您的 C# 解码缓冲区是正确的

$ echo "PHN2ZyB4bWxucz0naHR0cDov" | base64 -d | hexdump -C -n 16
00000000  3c 73 76 67 20 78 6d 6c  6e 73 3d 27 68 74 74 70  |<svg xmlns='http|
00000010

尽管他们都有可能给出想要的结果

于 2013-11-05T11:09:09.820 回答