Dekoder Protocol Buffers
Sprawdź zakodowaną wiadomość Protocol Buffers bez przesyłania jej na serwer i bez udawania, że jej schemat jest znany. Ten działający w przeglądarce dekoder przyjmuje jawnie wybrane dane szesnastkowe, Base64, Base64URL, surowy tekst UTF-8 lub plik binarny. Odczytuje wszystkie prawidłowe typy wire, zachowuje dokładność liczb całkowitych 64-bitowych, wskazuje offset uszkodzonych danych i pokazuje wszystkie kompletne interpretacje niejednoznacznych wartości poprzedzonych długością. Payload pozostaje w przeglądarce, a usługi wymienione w danych nie są wywoływane.
Jak to działa
-
1
Wybierz dokładne kodowanie
Wybierz zapis szesnastkowy, Base64, Base64URL, surowy tekst UTF-8 albo plik binarny. Narzędzie nigdy nie zgaduje formatu wejściowego.
-
2
Sprawdź pola wire
Zdekoduj tagi, numery pól i wartości wire, a następnie rozwiń każdy prawidłowy kandydat zagnieżdżony lub packed bez przypisywania typu schematu.
-
3
Wyeksportuj raport
Pobierz bezschematowy raport JSON, plik CSV zabezpieczony przed formułami lub czytelny raport tekstowy.
Co może potwierdzić dekoder Protobuf bez schematu
Protocol Buffers przechowuje sekwencję tagów pól i wartości, a nie pierwotne deklaracje .proto. Oficjalny przewodnik po kodowaniu protobuf definiuje tag jako (field_number << 3) | wire_type. Dekoder może więc potwierdzić numer pola, typ wire, granice bajtów i strukturalnie możliwe kodowania. Nie ustali, czy varint zadeklarowano jako uint64, int64, sint64, bool czy enum, ponieważ różne deklaracje mogą mieć identyczne bajty.
Tryb wejścia jest zawsze wybierany jawnie. Zapis szesnastkowy dopuszcza białe znaki ASCII i co najwyżej jeden początkowy prefiks 0x. Base64 i Base64URL są sprawdzane osobno, łącznie z długością, paddingiem i niewykorzystanymi bitami dopełnienia; nie wolno mieszać alfabetu standardowego z URL-safe. Surowy tekst oznacza dokładnie bajty UTF-8 utworzone przez przeglądarkowy TextEncoder, sekwencje ucieczki z ukośnikiem wstecznym nie są interpretowane. Plik jest odczytywany bajt w bajt.
Typy wire i interpretacje
| Typ wire | Zakodowana wartość | Co pokazuje raport |
|---|---|---|
| 0 | Varint | Dokładne wartości bez znaku, ze znakiem w kodzie uzupełnień do dwóch i ZigZag; wartość logiczna tylko dla 0 lub 1 |
| 1 | Osiem bajtów little-endian | Dokładne liczby fixed64 i sfixed64 oraz kandydat double |
| 2 | Długość, po niej bajty | Hex i Base64, ścisłe UTF-8, jeśli jest prawidłowe, oraz wszystkie kompletne kandydaty zagnieżdżone lub packed |
| 3 / 4 | Tagi początku i końca grupy | Pola potomne grupy o tym samym numerze; tag końcowy jest ogranicznikiem, a nie osobnym rekordem |
| 5 | Cztery bajty little-endian | Dokładne liczby fixed32 i sfixed32 oraz kandydat float |
Zwykły typ Number w JavaScript nie reprezentuje dokładnie każdej liczby 64-bitowej. Parser używa BigInt i konwertuje dokładne liczby całkowite na ciągi dziesiętne do wyświetlania i eksportu. Specjalne wartości zmiennoprzecinkowe, takie jak NaN, nieskończoności i ujemne zero, także są eksportowane jako tekst, aby JSON nie zmienił ich po cichu.
Niejednoznaczność wartości poprzedzonych długością
Typ wire 2 służy do zapisu ciągów, surowych bajtów, wiadomości osadzonych i spakowanych powtarzanych wartości skalarnych. Bez schematu jeden ciąg bajtów może pełnić kilka ról. Na przykład 2a 03 01 02 03 to pole 5 z trzema bajtami. Są one prawidłowymi spakowanymi varintami [1, 2, 3], ale też zwykłymi bajtami. Dekoder pokazuje obie możliwości bez wskazywania bardziej prawdopodobnej.
Kandydat na wiadomość zagnieżdżoną pojawia się tylko wtedy, gdy cała zawartość tworzy kompletną wiadomość. Kandydaty packed varint, fixed32 i fixed64 również wymagają zużycia wszystkich bajtów. Ścisły kandydat UTF-8 musi dekodować całą sekwencję bez znaków zastępczych. To możliwości strukturalne, nie deklarowany typ pola.
Grupy są obsługiwane zgodnie z gramatyką wire, chociaż nowoczesne schematy zwykle wybierają wiadomości osadzone. Tag początku grupy musi mieć tag końcowy z tym samym numerem pola. Koniec na poziomie głównym, inny numer lub brak zamknięcia powoduje błąd krytyczny przy dokładnym offsecie. Wcześniejsze kompletne pola pozostają widoczne; brakujące bajty i nieznane wartości nigdy nie stają się fałszywym zerem.
Limity, framing i bezpieczna obsługa
Dekoder przyjmuje jedną wiadomość bez framingu o rozmiarze do 10 MiB. Nie rozdziela strumienia z prefiksem długości, ramek gRPC, plików z rozdzielonymi wiadomościami ani kopert transportowych. Najpierw usuń framing, a potem zdekoduj jedną wiadomość. Parser ogranicza liczbę rekordów, głębokość rekursji, widoczne wiersze i pracę nad kandydatami zgodnie z duchem oficjalnych wskazówek o dużych zbiorach danych i limitach implementacji.
Numery pól muszą mieścić się w zakresie od 1 do 536 870 911. Zakres 19 000–19 999 wywołuje ostrzeżenie, ponieważ oficjalne zalecenia dotyczące numerów pól rezerwują go dla implementacji. Typy wire 6 i 7 są nieprawidłowe.
Analiza i eksport odbywają się lokalnie. Widok wieloetapowy może przechowywać ograniczony payload w sessionStorage tej karty przez maksymalnie dwie godziny; rozpoczęcie od nowa go usuwa. Nic nie trafia do adresu URL ani przez nasze serwery. JSON jest raportem dekodowania we własnym formacie tego narzędzia, a nie ProtoJSON. CSV zaczyna się od BOM UTF-8 i neutralizuje komórki przypominające formuły, aby bezpieczniej otwierać je w arkuszu. Raport może nadal zawierać poufne dane aplikacji, sprawdź go przed udostępnieniem.
Najczęściej zadawane pytania
Nie. Format wire zachowuje numery pól i kodowania wire, ale różne zadeklarowane typy skalarne mogą używać tych samych bajtów. Nazwy, komentarze i większość intencji schematu nie są zapisane.
Nie. Walidacja, analiza, filtrowanie i eksport działają w przeglądarce. Payload nie jest wysyłany na nasze serwery ani umieszczany w adresie URL.
Wartość poprzedzona długością może oznaczać bajty, tekst UTF-8, osadzoną wiadomość lub wartości packed. Bez schematu pokazanie wszystkich kompletnych kandydatów jest rzetelniejsze niż zgadywanie.
W tym miejscu tag, varint, wartość o stałej szerokości, zadeklarowana długość lub granica grupy była niepełna albo nieprawidłowa. Wcześniejsze kompletne pola pozostają w raporcie częściowym.
Nie bezpośrednio. Dekoder odczytuje jedną wiadomość protobuf i nie usuwa framingu gRPC, długości varint ani innych kopert transportowych. Najpierw wyodrębnij payload jednej wiadomości.
Powiązane narzędzia
Narzędzie odstępów w kodzie Python
Ujednolić wcięcia oraz proste odstępy przy przecinkach i operatorach. To lekka obróbka tekstu, a nie Black, Ruff ani parser Pythona.
Generator fikcyjnych numerów telefonu
Generuj do 50 fikcyjnych numerów z oficjalnie zastrzeżonych zakresów w pięciu krajach.
Generator przycisków CSS
Zaprojektuj przycisk CSS z jednolitym lub gradientowym tłem, podglądem sześciu stanów, kontrolą kontrastu oraz bezpiecznym kodem HTML i CSS.
Podgląd Markdown
Pisz w Markdown i obserwuj, jak wyrenderowany HTML aktualizuje się na żywo. Składnia w stylu GitHub z tabelami, listami zadań, ogrodzonymi blokami kodu i automatycznymi odnośnikami.
Generator losowych adresów
Twórz od 1 do 20 rekordów podobnych do adresów do makiet i testów, w trzech uproszczonych formatach.
Konwerter systemów liczbowych
Konwertuj liczby między systemem binarnym, ósemkowym, dziesiętnym, szesnastkowym i dowolną podstawą od 2 do 36 z rozbiciem pozycyjnym.
Narzędzie jest dostępne w innych językach
- Protocol Buffers デコーダー [JA]
- Protocol Buffers-decoder [NL]
- Decodificador de Protocol Buffers [ES]
- Công cụ giải mã Protocol Buffers [VI]
- Decodificador de Protocol Buffers [PT]
- Dekoder Protocol Buffers [ID]
- Protocol-Buffers-Decoder [DE]
- Protocol Buffers-avkodare [SV]
- أداة فك ترميز Protocol Buffers [AR]
- Protocol Buffers 디코더 [KO]
- ตัวถอดรหัส Protocol Buffers [TH]
- Décodeur Protocol Buffers [FR]
- Protocol Buffers Decoder [EN]
- Decodificatore Protocol Buffers [IT]
- Декодер Protocol Buffers [RU]
- Protocol Buffers Kod Çözücü [TR]
- Protocol Buffers 解码器 [ZH]