ตัวถอดรหัส Protocol Buffers

ขั้นตอน 1 / 333%

ตรวจสอบข้อความ Protocol Buffers ที่เข้ารหัสไว้โดยไม่ต้องอัปโหลดและไม่แสร้งว่ารู้สคีมา ตัวถอดรหัสในเบราว์เซอร์นี้รับอินพุตที่เลือกอย่างชัดเจนเป็นเลขฐานสิบหก, Base64, Base64URL, UTF-8 ดิบ หรือไฟล์ไบนารี เครื่องมือจะอ่าน Wire Type ของ protobuf ที่ถูกต้องทุกชนิด รักษาความแม่นยำของจำนวนเต็ม 64 บิต รายงานออฟเซ็ตที่ผิดรูป และแสดงการตีความที่สมบูรณ์ทุกแบบของไบต์ชนิด Length-delimited ที่กำกวม เพย์โหลดยังคงอยู่ในเบราว์เซอร์ และตัวถอดรหัสจะไม่ติดต่อบริการที่มีชื่อปรากฏอยู่ในข้อมูล

วิธีการทำงาน

  1. 1

    เลือกรูปแบบการเข้ารหัสให้ตรง

    เลือก hex, Base64, Base64URL, UTF-8 ดิบ หรือไฟล์ไบนารี เครื่องมือจะไม่เดารูปแบบอินพุตให้อัตโนมัติ

  2. 2

    ตรวจสอบฟิลด์ใน Wire Format

    ถอดรหัสแท็ก หมายเลขฟิลด์ และค่า Wire จากนั้นขยายค่าที่เป็นไปได้แบบ Nested หรือ Packed ทุกค่าที่ถูกต้องโดยไม่กำหนดชนิดจากสคีมาเอง

  3. 3

    ส่งออกรายงาน

    ดาวน์โหลด JSON แบบไม่มีสคีมา, CSV ที่ป้องกันสูตร หรือรายงานข้อความที่อ่านง่ายเพื่อนำไปวิเคราะห์ต่อ

สิ่งที่ตัวถอดรหัส Protobuf แบบไม่มีสคีมายืนยันได้

Protocol Buffers เก็บลำดับแท็กและค่าของฟิลด์ ไม่ได้เก็บประกาศเดิมจากไฟล์ .proto คู่มือการเข้ารหัส protobuf อย่างเป็นทางการ กำหนดแท็กด้วยการเลื่อนหมายเลขฟิลด์ไปสามบิตแล้วรวมกับ Wire Type ซึ่งเทียบเท่ากับ field_number × 8 + wire_type ดังนั้นตัวถอดรหัสจึงยืนยันหมายเลขฟิลด์, Wire Type, ขอบเขตไบต์ และรูปแบบการเข้ารหัสที่เป็นไปได้ตามโครงสร้างได้ แต่ยืนยันไม่ได้ว่า varint ถูกประกาศเป็น uint64, int64, sint64, bool หรือ enum เพราะชนิดเหล่านี้อาจใช้ไบต์ชุดเดียวกัน

ผู้ใช้ต้องเลือกโหมดอินพุตเองเสมอ Hex ยอมรับช่องว่างแบบ ASCII และคำนำหน้า 0x ที่ต้นข้อความได้ไม่เกินหนึ่งชุด Base64 และ Base64URL จะถูกตรวจสอบแยกกันทั้งความยาว แพดดิ้ง และบิตแพดดิ้งที่ไม่ได้ใช้ และห้ามผสมชุดอักขระมาตรฐานกับแบบ URL-safe ข้อความดิบหมายถึงไบต์ UTF-8 ตรงตามที่ TextEncoder ของเบราว์เซอร์สร้าง โดยจะไม่ตีความ Escape ที่ใช้แบ็กสแลช ส่วนอินพุตไฟล์จะใช้ไบต์จริงของไฟล์

Wire Type และการตีความ

Wire Type ค่าที่เข้ารหัส สิ่งที่รายงานแสดง
0 Varint ค่าจำนวนเต็มไม่คิดเครื่องหมายแบบแม่นยำ ค่ามีเครื่องหมายแบบ Two’s complement และค่า ZigZag ส่วน Boolean แสดงเฉพาะ 0 หรือ 1
1 ไบต์แบบ Little-endian 8 ไบต์ จำนวนเต็ม fixed64 และ sfixed64 แบบแม่นยำ พร้อมค่าที่เป็นไปได้แบบ double
2 ความยาวตามด้วยไบต์ Hex และ Base64, UTF-8 แบบเข้มงวดเมื่อถูกต้อง และค่าที่เป็นไปได้แบบ Nested หรือ Packed ที่สมบูรณ์ทุกแบบ
3 / 4 แท็กเริ่มและจบกลุ่ม ฟิลด์ลูกของกลุ่มที่มีหมายเลขตรงกัน โดยแท็กจบเป็นตัวคั่น ไม่ใช่เรคคอร์ดแยก
5 ไบต์แบบ Little-endian 4 ไบต์ จำนวนเต็ม fixed32 และ sfixed32 แบบแม่นยำ พร้อมค่าที่เป็นไปได้แบบ float

ชนิด number ทั่วไปของ JavaScript ไม่สามารถแทนจำนวนเต็ม 64 บิตได้ครบทุกค่าอย่างแม่นยำ ตัวถอดรหัสนี้ใช้ BigInt ตลอด Wire Parser และแปลงจำนวนเต็มที่แม่นยำเป็นสตริงฐานสิบสำหรับแสดงผลและส่งออก ค่าทศนิยมพิเศษ เช่น NaN, ค่าอนันต์ และศูนย์ติดลบ ก็ส่งออกเป็นสตริงด้วย เพื่อไม่ให้ JSON เปลี่ยนค่าเหล่านั้นเป็นค่าอื่นโดยไม่แจ้ง

ทำความเข้าใจความกำกวมของ Length-delimited

Wire Type 2 ใช้กับสตริง ไบต์ดิบ ข้อความฝัง และค่าสเกลาร์ซ้ำแบบ Packed เมื่อไม่มีสคีมา ลำดับไบต์หนึ่งชุดอาจถูกต้องในหลายบทบาทพร้อมกันได้ ตัวอย่างเช่น 2a 03 01 02 03 คือฟิลด์ 5 ที่มีสามไบต์ ไบต์เหล่านี้เป็น Packed Varint [1, 2, 3] ที่ถูกต้อง แต่ก็เป็นไบต์ธรรมดาได้เช่นกัน ตัวถอดรหัสจะแสดงทั้งสองแบบโดยไม่จัดอันดับว่าแบบใดน่าจะถูกกว่า

ค่าที่เป็นไปได้แบบ Nested Message จะปรากฏต่อเมื่อเนื้อหา Length-delimited ทั้งหมดแยกวิเคราะห์เป็นข้อความที่สมบูรณ์ได้เท่านั้น ค่าที่เป็นไปได้แบบ Packed Varint, fixed32 และ fixed64 ก็จะแสดงต่อเมื่อการตีความนั้นใช้ไบต์ครบทั้งหมด ส่วน UTF-8 แบบเข้มงวดต้องถอดรหัสลำดับทั้งหมดได้โดยไม่มีอักขระทดแทน การตรวจสอบเหล่านี้บอกความเป็นไปได้ทางโครงสร้าง ไม่ใช่ชนิดฟิลด์ที่ประกาศไว้

ระบบจะจัดการกลุ่มตามไวยากรณ์ Wire แม้ว่าสคีมาสมัยใหม่มักเลือกใช้ Embedded Message แทน แท็ก Start-group ต้องปิดด้วยแท็ก End-group ที่มีหมายเลขฟิลด์เดียวกัน แท็กจบที่ระดับราก แท็กจบที่ไม่ตรงกัน หรือแท็กจบที่ขาดหาย จะหยุดการถอดรหัส ณ ออฟเซ็ตไบต์ที่แน่นอน ฟิลด์ที่ถอดรหัสเสร็จก่อนข้อผิดพลาดยังคงแสดงอยู่ และไบต์ที่หายไปหรือค่าที่ไม่ทราบจะไม่ถูกแทนเป็นศูนย์ปลอม

ขีดจำกัด การทำ Framing และการจัดการอย่างปลอดภัย

ตัวถอดรหัสรับข้อความที่ไม่มีเฟรมหนึ่งข้อความขนาดไม่เกิน 10 MiB โดยจะไม่แยกสตรีมที่มีความยาวนำหน้า, เฟรม gRPC, ไฟล์ Delimited Message หรือซองการส่งข้อมูลอื่น โปรดนำ Framing ออกก่อน แล้วจึงถอดรหัสเพียงหนึ่งข้อความ Parser ยังจำกัดจำนวนเรคคอร์ดทั้งหมด ความลึกการเรียกซ้ำ จำนวนแถวที่มองเห็น และปริมาณงานตรวจสอบค่าที่เป็นไปได้ การควบคุมเหล่านี้เป็นไปตามแนวคิดของคำแนะนำทางการเกี่ยวกับชุดข้อมูลขนาดใหญ่และขีดจำกัดการติดตั้งใช้งาน: แม้ protobuf จะมีประสิทธิภาพ แต่แท็บวินิจฉัยในเบราว์เซอร์ก็ยังต้องจำกัดหน่วยความจำและงานประมวลผล

หมายเลขฟิลด์ต้องอยู่ระหว่าง 1 ถึง 536,870,911 ตัวถอดรหัสจะแจ้งเตือนหมายเลข 19,000–19,999 เพราะคำแนะนำหมายเลขฟิลด์อย่างเป็นทางการสงวนช่วงนี้ไว้สำหรับการติดตั้งใช้งาน ส่วน Wire Type 6 และ 7 ไม่ถูกต้อง

การแยกวิเคราะห์และส่งออกเกิดขึ้นภายในเครื่อง มุมมองหลายขั้นตอนอาจเก็บเพย์โหลดที่จำกัดขนาดไว้ใน sessionStorage ของแท็บนี้นานสูงสุดสองชั่วโมง และการเริ่มใหม่จะลบข้อมูลดังกล่าว ไม่มีข้อมูลใดถูกใส่ใน URL หรือส่งผ่าน เซิร์ฟเวอร์ของเรา เอาต์พุต JSON ระบุชัดว่าเป็นรายงานการถอดรหัสในรูปแบบเฉพาะของเครื่องมือนี้ ไม่ใช่ ProtoJSON ส่วน CSV ขึ้นต้นด้วย UTF-8 BOM และเติมคำนำหน้าให้เซลล์ที่ดูคล้ายสูตรเพื่อให้เปิดในสเปรดชีตได้ปลอดภัยขึ้น อย่างไรก็ตาม รายงานยังอาจมีข้อมูลลับของแอปพลิเคชัน จึงควรตรวจสอบก่อนแชร์

คำถามที่พบบ่อย

ไม่ได้ Wire Format เก็บหมายเลขฟิลด์และรูปแบบการเข้ารหัสไว้ แต่ชนิดสเกลาร์ที่ประกาศต่างกันอาจใช้ไบต์เดียวกันได้ ชื่อ คอมเมนต์ และเจตนาของสคีมาส่วนใหญ่ไม่ได้อยู่ในข้อมูล

ไม่ การตรวจสอบอินพุต การแยกวิเคราะห์ การกรอง และการส่งออกทำงานในเบราว์เซอร์ของคุณ เพย์โหลดจะไม่ถูกส่งผ่าน เซิร์ฟเวอร์ของเรา หรือใส่ใน URL

ค่าชนิด Length-delimited สามารถแทนไบต์ ข้อความ UTF-8, Embedded Message หรือค่า Packed ได้อย่างถูกต้อง เมื่อไม่มีสคีมา การแสดงค่าที่เป็นไปได้ซึ่งสมบูรณ์ทุกแบบย่อมตรงไปตรงมากว่าการเดา

แท็ก, varint, ค่าความกว้างคงที่, ความยาวที่ประกาศ หรือขอบเขตกลุ่ม ณ จุดนั้นไม่สมบูรณ์หรือไม่ถูกต้อง ฟิลด์ที่สมบูรณ์ก่อนหน้าจะยังอยู่ในรายงานบางส่วน

ยังทำโดยตรงไม่ได้ ตัวถอดรหัสนี้อ่านข้อความ protobuf หนึ่งข้อความและไม่ลบ Framing ของ gRPC, ความยาวแบบ varint หรือซองการส่งข้อมูลอื่น โปรดแยกเพย์โหลดของหนึ่งข้อความก่อน

เครื่องมือที่เกี่ยวข้อง

อ้างอิงตัวอักษร HTML

รายการที่สามารถค้นหาได้ขององค์ประกอบ HTML พร้อมรหัสชื่อและรหัสตัวเลข รวมถึงฟังก์ชันสำเนาด้วยคลิกเดียวสำหรับตัวอักษรพิเศษและสัญลักษณ์ต่างๆ

ตารางอ้างอิงแป้นพิมพ์ลัด

ค้นหาแป้นพิมพ์ลัดเริ่มต้นตามเอกสารของ VS Code, Chrome และ Bash ที่ใช้ GNU Readline บน macOS, Windows และ Linux

เครื่องสุ่มที่อยู่

สร้างระเบียนคล้ายที่อยู่ 1–20 รายการสำหรับแบบจำลองและการทดสอบ ด้วยรูปแบบประเทศแบบย่อ

ตารางอ้างอิง ASCII

ตาราง ASCII ครบตั้งแต่ 0 ถึง 127 พร้อมค่าเลขฐานสิบ ฐานสิบหก ฐานแปด ฐานสอง และรูปแบบการอ้างอิงอักขระแบบตัวเลขของ HTML รวม NUL, LF และ DEL

ตัวสร้างลูกศร CSS

สร้างลูกศร CSS ในเบราว์เซอร์ด้วยทิศทาง สี ขนาด และความหนาของเส้นขอบ แล้วคัดลอกกฎ.

ตัวตรวจสอบความถูกต้องของ JSON

ตรวจสอบไวยากรณ์ JSON และตรวจจับเครื่องหมายจุลภาคต่อท้าย เครื่องหมายอัญประกาศที่ผิด คีย์ซ้ำ และโครงสร้างที่ผิดรูปแบบ พร้อมระบุตำแหน่งข้อผิดพลาดอย่างแม่นยำ

เครื่องมือนี้มีให้บริการในภาษาอื่น