从R

时间:2017-07-09 00:22:12

标签: r base64

我正在尝试分析来自LegisScan的账单文本,但是我遇到了从API拉响应解码文本的问题。事实证明,在通过他们的API获取时,LegisScan可以编码基础64中所有立法的全文,并且我在解码它时遇到了一些麻烦。

downloaded JSON request 是我通过API下载的JSON结果的全文部分示例。但是,通常的方法似乎没有起作用。

我尝试过:

  1. 立法似乎没有直接支持R,所以我使用了包立法R.我使用了LegiscanR的BillText函数来获取正确的JSON链接,然后使用parseBillText尝试将链接中的文本解码为UTF-8。但是,即使链接中声明了正确的API密钥和文档ID,它也会引发fromJSON错误:
  2.   

    fromJSON中的错误(content,handler,default.size,depth,allowComments ,:     对象'严格'未找到

    1. 使用base64decode(base64enc包)或base64Decode(RCurl包)函数将文本从base 64转换为raw,然后使用rawToChar函数将其转换为字符。
    2. 我的代码:

      text <- base64decode("https://www.dropbox.com/s/5ozd0a1zsb6y9pi/Legiscan_fulltext.txt?dl=0")
      
      rawToChar(text)
      Nul <- text == as.raw(00)
      text[Nul] <- as.raw(20)
      text2 <- rawToChar(text)
      

      但是,尝试单独使用rawToChar会给我一个“嵌入字符串nul”错误

        

      rawToChar(test2)出错:     在字符串中嵌入nul:'%PDF-1.5 \ r \ n%\ xb5 \ xb5 \ xb5 \ xb5 \ r \ n1 0 obj \ r \ n&lt;&gt;&gt;&gt; \ r \ nendobj \ r \ n2 0 obj \ r \ n&lt;&gt; \ r \ nendobj \ r \ n3 0 obj \ r \ n&lt;&gt; / ExtGState&lt;&gt; / ProcSet [/ PDF / Text / ImageB / ImageC / ImageI]&gt;&gt; / MediaBox [ 0 0 612 792] /目录4 0 R /组&lt;&gt; / Tabs / S / StructParents 0&gt;&gt; \ r \ nendobj \ r \ n4 0 obj \ r \ n&lt;&gt; \ r \ n \ nstream \ r \ n \ n \ n \ n \ x9c \ xb5ZYs \ xdb8 \ 022〜w ^ \ X95 \ XFF \ 003 *○\ u0516M \ 021ཛJ□\ X95 \xe3ę̵\ X99 \ XB1 \ xa7f \ XB7 \ x92y \ XA0 $ \ XCA \ XE2 \ 86" \ 025 \ 036 \ XF6 \ XE6 \ xdfow \ 003 \ X94 \ bR0sh \ X93 * \ x99G \ XA3 \ 001 | \ XDD \ xfdu7 \ XA4 \ xf9U \ xd5d \ xebd \ XE7 \ XCF \ xe7WM \ x93,7銽\ x9f \ u07d5 \ XBB \ XBF \ xe6w \ x9fw \ xe9 \ XFC] r \ x9f \ 025I \ X93 \ X95 \ XC5 \ XFC \ XB6] 4 \ XF8 \ xe8 \ x874Y \ xa5Ջ\ 027 \ XEC \ xe5 \ xabk \ XF6 \ XF2 \ XEE \ xfcl〜\ xc3Yl \ xc7 \

      将这些空值替换为表示空格允许rawToChar运行,但输出是乱码,或者是另一种不是预期的英文文本字符的编码形式。

        

      [1]“\ x86 \ xdbi \ xb3 \ xff \ xf0 \ xc3 \ ak \ xa2 \ x96 \ xe8 \ xc5 \ xca&amp; \ xfe \ xcf \ xf9 \ xa37tk \\ xeco \ xac \ xbd \ xa6 / \ xcbz \ b \ xacq版权所有\ xA9 \ u07faYm {\033米\ XC6 \ xd7e“

      还有什么其他想法可以尝试?感谢。

1 个答案:

答案 0 :(得分:0)

我一直在处理Python和Python中的相同问题,以下代码有效:

import base64
raw = base64.b64decode(bill_text['doc'])
pdf_result = open(output_file, "wb").write(raw)

我想也许在你的情况下你试图将文档立即转换为文本,但这可能不那么容易,我在Python中通过使用PyPDF2库中的函数解析保存的PDF文件。